正则表达式类似通配符
\b:单词的分界处,包括开头和结尾,只匹配一个位置。E.G:\bhi\b即为搜索hi
但如果hi 后面跟了一个Lucy,匹配\bhi\b.*\bLucy\b
.:匹配除了换行符以外的任意字符
*:前边的内容可以连续重复使用任意次以使整个表达式得到匹配
所以\bhi\b.*\bLucy\b:先是一个单词hi,然后是任意个任意字符(但不能是换行),最后是Lucy这个单词。
\d:匹配一个数字
简化方式:
0\d\d-\d\d\d\d\d\d\d\d == 0\d{2}-\d{8}
\s:任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格
\w:字母或数字或下划线或汉字等
+:与*类似,匹配重复1次或更多次
^:匹配字符串的开始
$:匹配字符串的结束
{2}匹配只能不多不少重复2次,
{5,12}则是重复的次数不能少于5次,不能多于12次,否则都不匹配
{n,}重复n次或更多次
?重复零次或一次
[) -]?:) -三个字符中的一个可能出现或不出现
deerchao\.net匹配deerchao.net
|:把不同的分支条件隔开
(\d{1,3}\.){3}匹配三位数字加上一个英文句号(这个整体也就是这个分组)重复3次
\B:匹配不是单词开头或结束的位置
[^x]:匹配除了x以外的任意字符
捕获与反向捕获:
\b(\w+)\b\s+\1\b可以用来匹配重复的单词,像go go,重点在于其中的\1:分组1中捕获的内容(也就是前面匹配的那个单词)
(?<Word>\w+)(或者把尖括号换成'也行:(?'Word'\w+)),这样就把\w+的组名指定为Word了
\k<Word>即为反向捕获
零宽断言:
(?=exp)也叫零宽度正预测先行断言,\b\w+(?=ing\b)在I'm singing while you're dancing.匹配sing和danc
(?<=exp)也叫零宽度正回顾后发断言,(?<=\bre)\w+\b在reading a book匹配ading
负向零宽断言:
(?!exp),断言此位置的后面不能匹配表达式exp
(?<!exp),断言此位置的前面不能匹配表达式exp
贪婪与懒惰:
贪婪匹配:(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符,反之为懒惰匹配
---需要的时候再查吧
简单示例:
>>>importre>>>regex=re.compile(r'\b\w{6}\b')# 匹配6个字符的单词>>>regex.search('My phone number is 421-2343-121')>>>text=regex.search('My phone number is 421-2343-121')>>>text.group()# 调用 group() 返回结果'number'