python3中re模块

常用的正则表达式符号

1
2
3
4
5
6
7
8
9
10
1  '.'      # 默认匹配换行符(\n)之外的任意一个字符;flags=re.DOTALL(将换行符也匹配出来)
2 '^' # 匹配字符串开头;flags=re.MULTILINE(如果开头为换行符或者其他特殊,可以从换行符后面开始匹配)
3 '$' #匹配字符串结尾;flags=re.MULTILINE(如果字符串有换行符的话换行符前的字符也可以在行尾匹配)
4 '*' #匹配*号前面的字符0次或者多次[0, +oo]
5 '+' #匹配前一个字符1次或者多次[1, +oo]
6 '?' #匹配前一个字符1次或者0次
7 '{m}' #匹配前一个字符m次
8 '{n, m}' #匹配前一个字符n到m次
9 '|' #匹配|左边或者|右边的字符
10 '(...)' #匹配括号中的任意正则表达式

包含’\’的正则表达式特殊序列

1
2
3
4
5
6
7
\d  #匹配任何十进制数:它相当于类[0-9]
\D #匹配任何非数字字符:它相当于[^0-9]
\s #匹配任何空白字符:它相当于类[ \t\n\r\f\v]
\S #匹配任何非空白字符:它相当于类[^ \t\n\r\f\v]
\w #匹配任何字母数字字符:它相当于类[a-zA-Z0-9]
\W #匹配任何非数字字母字符:它相当于[^a-zA-Z0-9]
\b #匹配一个单词边界,也就是指单词和空格间的位置

常用的语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import re #放在文件头以下省略
re.findall #把所有匹配的字符以元素的形式放入列表,返回一个列表
print(re.findall('^a', '\nabc')) #[]
print(re.findall('^a', '\nabc', flags=re.MULTILINE)) #['a']
print(re.findall('.', '\nabc')) #['a', 'b', 'c']
print(re.findall('.', '\nabc', flags=re.DOTALL)) #['\n', 'a', 'b', 'c']

re.search #查找字符串中于正则表达式匹配的第一个位置,返回相应的MatchObject实例,后缀 .group() 方法可以取得相应的str型值
print(re.search('a', '\nabdgc ddaad')) #<re.Match object; span=(1, 2), match='a'>
print(re.search('a', '\nabdgc ddaad').group()) #a #直接以字符出返回

re.sub #将匹配到的字符替换
print(re.sub('正则表达式', '用来替代的字符串', '字符串')) #返回替换后的字符串
print(re.sub('.', 'a', '\nabdgc ddaad')) #aaaaaaaaaaa

re.split #将匹配到的字符当做列表分隔符,将分隔开的元素放在列表中返回
print(re.split('abc', 'sldkleabcdklsabcd')) #['sldkle', 'dkls', 'd']

re.match #只在字符串开头位置开始匹配,返回MatchObject实例,使用.group()获取值
print(re.match('abc', 'sldkleabcdklsabcd')) #None #匹配不到返回None
print(re.match('abc', 'abcabcsldkledklsabcd')) #<re.Match object; span=(0, 3), match='abc'>
print(re.match('abc', 'abcabcsldkledklsabcd').group()) #abc

#*,+,?都是贪婪匹配,也就是尽可能的匹配 后面加?使其变成惰性匹配

转义字符反斜杠

1
2
3
4
5
6
7
#   \   :反斜杠后边跟元字符去除特殊功能
# 反斜杠后面跟普通字符实现特殊功能(某些普通字符d、w、等)
# 在编程中想要匹配字符串中的'\'需要四个反斜杠'\\\\'因为编程语言将四个反斜杠变为两个,而正则表达式使用两个反斜杠来匹配这一个反斜杠
import re
print(re.findall('\\\\', 'sdas\dadas')) #['\\'] #这里输出编程语言两个反斜杠相当于字符串中一个斜杠
上面等价于
print(re.findall(r'\\', 'sdas\dadas')) #['\\'] #原生字符串

参考文献

https://www.jianshu.com/p/d2a03a5945ea