正则表达式

python 使用正则表达式(re)来进行匹配引擎搜索

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”

关于正则表达式,必须先学会它的元字符

元字符 : ^  $  *  +  ?  { }  [ ]  |  ( )  \

.  匹配除\n(换行符)以外的任何字符,若指定flag DOTALL,则匹配任意字符,包括换行

s = re.findall('b...u', 'www.baidu.com www')
>>> ['baidu']

^  匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)

s = re.findall('^w.w', 'www.baidu.com wWw')
>>> ['www']

$  匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以

s = re.findall('w.w$', 'www.baidu.com wWw')
>>> ['wWw']

*  匹配*号前的字符0次或多次

s = re.findall('abc*', 'abccccccc')
>>> ['abcccccc']
s = re.findall('abc*', 'ab')
>>> ['ab']

+   匹配前一个字符1次或多次

s = re.findall('abc+', 'abccccccc')
>>> ['abcccccc']

?   匹配前一个字符1次或0次

s = re.findall('abc?', 'abccccccc')
>>> ['abc']

{n}  匹配前一个字符n次,即前一个字符至少出现n次

s = re.findall('abc{2}', 'abccccccc')
>>> ['abcc']

{n,m}  匹配前一个字符n到m次

s = re.findall('abc{2,3}', 'abccccccc')
>>> ['abccc']

|  匹配|左或|右的字符

s = re.findall('abc|ABC', 'abcABC')
>>> ['abc', 'ABC']

()   提取括号中的内容

s = re.findall('(bai)', 'www.baidu.com')
>>> ['bai']

[ ] 字符集:1、[ab] 取a或b 2、字符集里的符号没有特殊的意义 3、尖角号^取反 4、选择出某种元素

# 1、[] 里面的元素取其一
s = re.findall('[aid]', 'www.baidu.com')
>>>['a', 'i','d']
# 2、消除符号的特殊意义
s = re.findall('[*]', 'abccccccc*')
>>>['*']
# 3、取反
s = re.findall('[^abc]', 'abcABC')
>>>['A', 'B', 'C']
# 4、选择元素(数字或字母)
s = re.findall('[a-z]', 'ab123c41d2ABeC')
>>>['a', 'b', 'c', 'd', 'e']

\   反斜杠后边跟元字符去除特殊功能,反斜杠后边跟普通字符实现特殊功能

通用字符

\A    只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的
\Z 匹配字符结尾,同$
\D 匹配非数字
\S 匹配任何非空白字符
\W 匹配非[A-Za-z0-9]
\d 匹配数字0-9,十进制数字
\w 匹配[A-Za-z0-9],匹配任一字母、数字、下划线
\s 匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 '\t'

模式修正符,一般放在最后位置

I  re.I   不区分大小写

M re.M 多行匹配,改变'^'和'$'的行为

S re.S  点任意匹配模式,改变'.'的行为

常用的匹配语法

re.findall()  # 完全匹配,把所有匹配到的字符放到以列表中的元素返回
re.findall('com','www.baidu.com map.baidu.com')
>>> ['com', 'com'] re.match() # 从头开始匹配
re.match('com','www.baidu.com map.baidu.com')
>>> None re.search() # 搜索匹配,仅返回一个结果;通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。
re.search('com','www.baidu.com map.baidu.com').group()
>>> com re.split() # 按照能够匹配的子串将字符串分割后返回列表。maxsplit用于指定最大分割次数,不指定使用默认值0将全部分割
re.split('\d','www.1baidu2.3com',2) # 默认为0,即全部分隔;指定次数后只分隔两次
>>> ['www.', 'baidu', '.3com']
re.split(' ','www.baidu.com map.baidu.com') # 分隔空格
>>> ['www.baidu.com', 'map.baidu.com'] re.sub() # 匹配字符并进行替换
re.sub('\d','ai','www.b1du.com ',1) # 替换一次
>>> www.baidu.com
re.subn() # 与 sub 函数完全一致,只不过其返回值是包括两个元素的元组:(new_string, number);第一个返回值 new_string 为sub 函数的结果,第二个 number 为匹配及替换的次数。
ret=re.subn('\d','ai','www.b1du.com map.b2du.com',2) # 替换两次
>>> ('www.baidu.com map.baidu.com', 2)

re 模块的两种匹配模式

贪婪模式:尽可能多的去匹配

惰性模式:尽可能少的去匹配(后面加?号来限制)

Python学习 :正则表达式的更多相关文章

  1. python学习——正则表达式

    正则表达式                        正则表达式的主要作用就是对字符串进行匹配,通过匹配,进行筛选,选择出符合规则的字符串.其实正则表达式的作用就像是一个过滤器一样.你输入好自己的 ...

  2. python学习 正则表达式

    一.re 模块中 1.re.match #从开始位置开始匹配,如果开头没有match()就返回none 语法:re.match(pattern, string, flags=0) pattern 匹配 ...

  3. Python学习 ——正则表达式

    正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. re 模块使 Python 语言拥有全部的正则表达式功能. compile 函数根据一个模式字符串和可选的标志参数生 ...

  4. python学习-正则表达式(十)

    1.查看re模块的全部属性和函数 >>>import re,pprint >>>pprint.pprint(re.__all__) ['match', 'fullm ...

  5. [python 学习]正则表达式

    re 模块函数re 模块函数和正则表达式对象的方法match(pattern,string,flags=0) 尝试使用带有可选的标记的正则表达式的模式来匹配字符串.如果匹配成功,就返回匹配对象:如果失 ...

  6. 四、python学习-正则表达式

    正则表达式 import re lst = re.findall(正则表达式,需要匹配的字符串) findall 把所有匹配到的字符串都搜出来,返回列表 不能把分组内容和匹配内容同时显示出来 sear ...

  7. Python学习笔记——正则表达式入门

    # 本文对正则知识不做详细解释,仅作入门级的正则知识目录. 正则表达式的强大早有耳闻,大一时参加一次选拔考试,题目就是用做个HTML解析器,正则的优势表现得淋漓尽致.题外话不多讲,直接上干货: 1. ...

  8. 学习 正则表达式 js java c# python 通用

    正则表达式 js java c# python 学习网站 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Globa ...

  9. 【Python学习笔记四】获取html内容之后,如何提取信息:使用正则表达式筛选

    在能够获取到网页内容之后,发现内容很多,那么下一步要做信息的筛选,就和之前的筛选图片那样 而在python中可以通过正则表达式去筛选自己想要的数据 1.首先分析页面内容信息,确定正则表达式.例如想获取 ...

  10. [Python学习笔记]正则表达式总结

    常用缩写字符及其含义表格查询 缩写字符分类 含义 \d 0-9的任意数字 \D 除0-9的数字以外的任何字符 \w 任何字母.数字或下划线字符(可以认为是匹配"单词"字符) \W ...

随机推荐

  1. 爬虫入门之Scrapy框架基础框架结构及腾讯爬取(十)

    Scrapy终端是一个交互终端,我们可以在未启动spider的情况下尝试及调试代码,也可以用来测试XPath或CSS表达式,查看他们的工作方式,方便我们爬取的网页中提取的数据. 如果安装了 IPyth ...

  2. 【Leetcode】【Medium】Subsets II

    Given a collection of integers that might contain duplicates, S, return all possible subsets. Note: ...

  3. INDEX SKIP SCAN适用场景

    --请记住这个INDEX SKIP SCAN扫描方式 drop table t purge;create table t as select * from dba_objects;update t s ...

  4. nginx导致的session丢失的解决方法

    nginx把同一用户的请求分发到了不同的服务器,如果不做处理,就会导致session丢失. 1.粘性IP: 在nginx配置文件中,增加配置, 对IP进行HASH后,散列到服务器. 这个实现最简单.但 ...

  5. 如何在两个月的时间内发表一篇EI/SCI论文-我的时间管理心得

    在松松垮垮的三年研究生时期,要说有点像样的成果,也只有我的小论文可以谈谈了.可能有些厉害的角色研究生是丰富而多彩的,而大多数的同学在研究生阶段可能同我一样,是慢悠悠的渡过的,而且可能有的还不如我,我还 ...

  6. 移动端 html基值(转载)

    (function () { document.addEventListener('DOMContentLoaded', function () { var html = document.docum ...

  7. hdu 6214 Smallest Minimum Cut[最大流]

    hdu 6214 Smallest Minimum Cut[最大流] 题意:求最小割中最少的边数. 题解:对边权乘个比边大点的数比如300,再加1 ,最后,最大流对300取余就是边数啦.. #incl ...

  8. hdu-2837 Calculation---指数循环节

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2837 题目大意: 已知f(0) = 1,0^0 =1,[注意,0的其他任意次方为0,虽然题没有直接给 ...

  9. 一切皆文件-文件是对IO的最简抽象

    引用<Linux Kernel Development>原书里面的一句话 in Unix, everything is a file.This simplifies the manipul ...

  10. wampserver 最新版本 mysql修改数据库密码

    由于wampsever版本更新就导致以前版本的密码修改造成失败,主要是密码字段改变造成的! 第一步 进入MySQL 控制台  wamp安装,数据库是没有密码 进入控制台直接回车就可以了 第二步 使用 ...