1、\d{3}-\d{3}-\d{4} "{ }"之中的数字代表重复次数,\d 表示以为数字字符 即 0 ~ 9 的数字
正则匹配练习
1)import re
2)re.complie()创建一个 Regex 对象 例如 phone = re.complie(r'\d{3}-\d{3}-\d{4}')
3)Regex对象的search()方法传入想查找的字符串,返回一个Match对象
4)调用Match对象的group()方法,返回实际匹配文本的字符串。
测试:http://regexpal.com
2、利用()分组
正则表达式字符串中的第一对括号是第1组,第二对括号是第2组,向group()匹配对象方法传入整数1或者2,就可以匹配到不同部分,传入 0 或者不传入参数,返回整个匹配的文本,如果想获取所有分组,请使用groups()方法,如下:
3、利用管道匹配多个分组
字符 | 称为管道,希望匹配许多表达式中的一个,就可以使用它
如果希望匹配多个模式中的一个,例如 希望匹配Batman、Batmobile、Batcopter、Batbat中的任意一个,则可以通过括号来实现:
mo.group()返回了完全匹配的文本
mo.group(1)只是返回第一个括号分组内匹配的文本 ‘mobile’
如果需要匹配真正的管道字符就使用反斜杠转义 即 \|
4、用问号实现可选匹配
字符?表明它前面的分组在这个模式中是可选的,如下:
注意:? 匹配零次或1次
5、用星号匹配零次或多次
上面例子 修改后 如下:
注意:可以观察一下mo2、mo3区别
6、用加号匹配一次或多次
*号意味着 “匹配0次或多次”,+ 则意味着“匹配一次或多次” *号不要求分组出现在匹配的字符串中,但加号不同,必须至少出现一次,如下:
注意: mo3
7、用花括号匹配特定次数
如果想要一个分组重复特定的次数,就在正则表达式中该分组的后面,跟上花括号包围的数字。(Ha){3} 匹配‘HaHaHa’
除了一个数字,还可以匹配一个范围,例如:(Ha){3,5} 将匹配‘HaHaHa’、‘HaHaHaHa’、‘HaHaHaHaHa’
也可以不写花括号中的第一个 或 第二个数字,不限定最小值或最大值,例如:
(Ha){3,} 将匹配3次或者更多次
(Ha){,5} 将匹配0到5次
注意:mo2
8、贪心和非贪心匹配
Python的正则表达式默认是 贪心 的,这表示在有二义的情况下,会匹配最长的字符串,非贪心模式匹配尽可能短的字符串,即 在花括号的后边跟一个问号,如下:
9、findall()方法
search()返回一个Match对象,而findall()方法将返回一组字符串,包含被查到的所有字符串中的所有匹配。
findall()返回一个字符串列表,只要在正则表达式中没有分组,列表中的每个字符串都是一段被查找的文本,匹配正则表达式 例如:
如果在正则表达式中有分组,那么findall将返回元组的列表,每个元组表示一个找到的匹配,其中的项就是正则表达式中每个分组的匹配字符串,例如:
10、建立自己的字符分类
有时想匹配一组字符,但缩写的字符分类太宽泛,可以用方括号定义自己的字符分类,
在字符分类的左方括号后加上一个插入字符(^),就可以得到“非字符类”,将匹配不在这个字符类中的所有字符
11、插入字符和美元字符
可以在正则表达式开始地方插入 ^,表面匹配必须发生在被查找文本开始处,类似的,可以在正字表达式末尾加上美元符号 $ 表结束
举例:
12、不区分大小写的匹配
re.compile() 传入 re.I 作为第二个参数
13、用sub()方法替换字符串
需要传入2个参数,第一个是一个字符串,用于取代发现的匹配,第二个参数是一个字符串,即 正则表达式
例如:
有时候,你可能需要使用匹配的文本本身,作为替换的一部分,在sub()的第一个参数中,可以输入\1、\2、\3、\4 。。。。表示“在替换中输入分组1、2、3.。。的文本”
例如,假定想要隐去姓名,只显示他们的名字的第一个字母,可以使用Agent(\w)\w*,传入r'\1****'作为sub()的第一个参数。字符串中的\1将由分组1匹配的文本所替代,也就是正则表达式的(\w)分组
14、组合使用第二个参数
re.compile()函数只接受一个值作为它的第二个参数,但可以使用 | 将变量组合起来
someRegexValue = re.compile('foo',re.IGNORECASE | re.DOTALL | re.VERBOSE)