. 匹配任意单一字符,除了\n换行符 (.匹配点号) chen.... , ..,.end
^ 或 \A 匹配字符串开始位置 ^Start
$ 或 \Z 匹配字符串结尾位置 end$
\b 匹配单词的边界 \B 匹配在单词中间 \bthe , \bthe\b,\Bthe
[ ] 匹配方括号里的任意一个字符 b[ajah]t [sd][jkl][kjkjk]
[0-9] 数字 [a-zA-Z] 字母
[^aeiou] 不包括aeiou [^\t\n] 不匹配制表符和换行符
* 匹配0次或多次前面的正则表达式 尽可能多
+ 匹配一次或多次 尽可能多
? 匹配0次或一次 尽可能多
* + ? 都是贪婪匹配,会尽可能多地匹配,* ?,+?,??是非贪婪匹配,会尽可能少地匹配
{N} 匹配N次
{M,N} 匹配M到N次 {M,N}? 非贪婪版
( ) 匹配封闭的正则表达式,然后另存为子组 ([0-9]{3})?
\d 相当于 [0-9] \D 相当于 [^0-9]
\w 相当于 [A-Wa-z0-9] \W 相当于 [^A-Wa-z0-9]
\s 匹配任何空格字符,相当于 [\n\t\r\v\f] \S 与之相反
\d{4}-\d{7} 电话号码 0737-2837928等
拓展表示法
1.(?...) ?后的字符决定使用的模式,除了(?P<name>...),不建立分组
2.(?aiLmsux) 用在正则表达式之前,向其传递参数,
a 相当于re.A 只匹配ASCII码
i 相当于re.I 忽略大小写
L 相当于re.L 根据本地编码格式
m 相当于re.M 多行模式
s 相当于re.S 点号可以匹配所有,包括\n
u 相当于re.U Unicode matching
x 相当于re.X 可以将pattern分解成多行,并添加注释
3.(?:...) 匹配...,但不保留分组
4.(?P<name>...) 将分组命名为name
5.(?P=name) 调用之前的name分组
6.(?#...) 注释,会被忽略
7.(?=...) 'le(?=chen)' 只有后面是chen时才会匹配le
8.(?!...) 'le(?!chen)' 只有后面不是chen时才匹配le
9.(?<=...) 只有前面是...才匹配
10.(?<!...) 只有前面不是...才匹配
m = re.search(r'(?<=-)\w+','spam-egg')
m.group(0)
'egg'
11.(?(id/name)yes-pattern|no-pattern)
如果id/name分组存在则匹配yes-pattern,否则匹配no-pattern.
re.search(pattern,string,flags=0)
搜索整个string,直到第一个pattern,返回相应的match object,如果没有,返回None
re.match(pattern,string,flags=0)
在string开头匹配pattern,返回match object,否则返回None. 即使是多行模式,也只匹配开头部分.
re.fullmatch(pattern,string,flags=0)
如果整个string能匹配pattern,返回match object,否则返回None
re.split(pattern,string,maxsplit=0,flags=0)
以pattern分解string为列表,maxsplit为n时,切分n次,如果pattern由括号包围时,pattern会保留在列表内,开头和结尾有pattern时,列表里会有空字符串''.
re.findall(pattern,string,flags=0)
返回string中所有能匹配pattern的matchs列表,相同的话,不会覆盖,当有一个以上分组时,返回元组列表,只匹配到一个的话,其他的为空字符串''
re.finditer(pattern,string,flags=0)
返回包含所有match的迭代器
re.sub(pattern,repl,string,count=0,flags=0)
In [68]: re.sub('a|e','QQ','abcde')Out[68]: 'QQbcdQQ'
搜索并替换,repl可以是字符串,也可以是函数,count表示替换次数
$def dashrepl(matchobj):
if matchobj.group(0) == '-': return ' '
else: return '-'$ re.sub('-{1,2}', dashrepl, 'pro----gram-files')
$'pro--gram files'
$ re.sub(r'\sAND\s', ' & ', 'Baked Beans And Spam',flags=re.IGNORECASE)
$'Baked Beans & Spam'
re.subn(pattern,repl,string,count=0,flags=0)
操作与sub()相同,不过是返回一个元组(new_string,n_of_subs)
re.purge()
清除缓存的正则表达式