正则表达式使用总结
\b 并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置
. 匹配除了换行符以外的任意字符
* *前面的内容可以连续重复使用任意次(即0次或多次)
? ?前面的内容可以出现0次或1次
.* 匹配任意数量的不包含换行的字符
+ +前面的内容可以连续重复使用1次或多次(即1次或多次)
*? 匹配重复任意次,但尽可能少重复的字符
+? 匹配重复1次或更多次,但尽可能少重复的字符
?? 匹配重复0次或1次,但尽可能少重复的字符
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复
^ 匹配你要用来查找的字符串的开头
$ 匹配结尾
[] 匹配[]中出现的任意一个字符
[aeiou] 匹配任何一个英文元音字母
[.?!] 匹配标点符号(.或?或!)
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符
\d 匹配任意数字字符
\D 匹配任意非数字的字符
\d{2} 匹配2个任意数字
\d{2,5} 匹配2-5个任意数字
\d+ 匹配1个或更多连续的数字
\w 匹配字母或数字或下划线或汉字等
\W 匹配不是字母或数字或下划线或汉字等
\s 匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等
\S 匹配任意的不是空白符,包括空格,制表符(Tab),换行符,中文全角空格等
分枝条件:
| 有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开
0\d{2}-\d{8}|0\d{3}-\d{7} 这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)
分组:
() 用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数了,你也可以对子表达式进行其它一些操作
贪婪匹配:
匹配尽可能多的字符
a.*b 它将会匹配最长的以a开始,以b结束的字符串
非贪婪匹配:
匹配尽可能少的字符
.? 匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。
a.?b 匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)。
零宽断言:
(?=exp) 也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp。比如\b\w+(?=ing\b),匹配以ing结尾的单词的前面部分(除了ing以外的部分),如查找I’m singing while you’re dancing.时,它会匹配sing和danc。
(?<=exp) 也叫零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp。
比如 (?<=\bre)\w+\b 会匹配以re开头的单词的后半部分(除了re以外的部分),例如在查找reading a book时,它匹配ading。
(?<=\s)\d+(?=\s) 匹配以空白符间隔的数字(再次强调,不包括这些空白符)
python中的re模块函数:
第一个参数pattern是正则表达式字符串或正则表达式对象
第二个参数string是要跟正则表达式做匹配的字符串对象
compile(pattern, flags=0) 编译正则表达式返回正则表达式对象
match(pattern, string, flags=0) 用正则表达式匹配字符串 成功返回匹配对象 否则返回None
search(pattern, string, flags=0) 搜索字符串中第一次出现正则表达式的模式 成功返回匹配对象 否则返回None
split(pattern, string, maxsplit=0, flags=0) 用正则表达式指定的模式分隔符拆分字符串 返回列表
sub(pattern, repl, string, count=0, flags=0) 用指定的字符串替换原字符串中与正则表达式匹配的模式 可以用count指定替换的次数
fullmatch(pattern, string, flags=0) match函数的完全匹配(从字符串开头到结尾)版本
findall(pattern, string, flags=0) 查找字符串所有与正则表达式匹配的模式 返回字符串的列表
finditer(pattern, string, flags=0) 查找字符串所有与正则表达式匹配的模式 返回一个迭代器
purge() 清除隐式编译的正则表达式的缓存
re.I / re.IGNORECASE 忽略大小写匹配标记
re.M / re.MULTILINE 多行匹配标记