r'[\u4e00-\u9fa5]汉字
.匹配除换行符外的任意字符
\d匹配所有数字 ,与[0-9]相同[0123456789]
\D匹配非数字字符,[^0-9]
\w匹配数字,字母,下划线[0-9a-zA-Z_]
\W匹配非数字 字线 下划线[^0-9A-Za-z]
\s匹配任意空白符(空格 换行 换页符 制表符 回车,同[ \f\n\r\t]
\S匹配任意非空白符(空格 换行 换页符 制表符 回车,同[^ \f\n\r\t]
^行首匹配
$行尾匹配
\A 匹配字符串开始,只匹配整个字符串的开头.与^区别:即使与re.M配合也只能匹配当前行行首,不会匹配其他行的行首
\Z匹配字符串结束,只匹配整个字符串的结束.与$区别:即使与re.M配合也只能匹配当前行行尾,不会匹配其他行的行尾
>>> print(re.search(r"\AI","I'm a never"))
<re.Match object; span=(0, 1), match='I'>
>>> print(re.search(r"I\Z","I'm a never"))
None
>>> print(re.search(r"r\Z","I'm a never"))
<re.Match object; span=(10, 11), match='r'>
>>>
\b匹配一个单词的边界,就是单词和空格间的位置
\B匹配非单词的边界
>>> print(re.search(r'er\b',"never"))
<re.Match object; span=(3, 5), match='er'>
>>> print(re.search(r'er\B',"never"))
None
>>>
(abc)匹配abc这三个字符组合串
(abc)?匹配0个或1个abc
(abc)*匹配0个或任意多个abc
.*匹配0个或任意个字符(换行符除外)
(abc)+匹配至少一个abc
(abc){2,5}匹配2或3或4或5个abc
import re
aa="this di df er dman man"
print(re.split(r" +",aa))上
上面的代码是用正则分割字符
结果:
===================== RESTART: D:/Python/Python37/re2.py =====================
['this', 'di', 'df', 'er', 'dman', 'man']
>>>
import re
aa=r'[0-9a-zA-Z_]'#匹配任意一个数字字母或下划线
print(re.search(aa,"dsfs345355"))
rr="i an dfef fgdei fdfeffd"
rra=re.finditer(r'fe',rr) #与findall类似,查找整个字符串,但不将结果一次性放到内存中,而返回一个迭代器
for i in rra: #用循环返回结果
print(i.group())
print(".........")
rra=re.finditer(r'df',rr)
while True: #利用循环与next结合返回结果
try:
ia=next(rra) #迭代器用next返回
print(ia.group())
except StopIteration as e:
break上
上面的代码是finditer:查找到的每个结果,用其group()返回其具体结果值
findall 返回一个包含所有匹配到的字符的列表,列表类以元组的形式存在。
finditer 返回一个可迭代对象。
结果:
===================== RESTART: D:\Python\Python37\re1.py =====================
<re.Match object; span=(0, 1), match='d'>
fe
fe
.........
df
df
>>>
import re
aa=r'[0-9a-zA-Z_]'#匹配任意一个数字字母或下划线
print(re.search(aa,"dsfs345355"))
rr="i an dfef fgdei fdfeffd"
#sub subn:在目标字符串中以正则表达式的规则匹配字符串,再把其替换成指定的字符串,可以指定替换次数。如果不指定默认替换所有符合目标对象
#sub直接返回替换后的结果;subn:返回元组:替换后的结果,替换的次数
rrb=re.sub(r'df',"gg",rr)
rrbb=re.subn(r'df',"gg",rr)
print(rrb)
print(rrbb)
print("..............")
strb="sunck is a go0534-3456776od man!sunck is 020-45343422a nice man! sunk is good man 010-53247654"
stra="010-33434344"
m=re.match(r"(\d{3})-(\d{8})",stra) #match从最左边匹配
print(m)
print(m.group(0))
print(m.group(1))
print(m.group(2))
print(">>>>>>>>>>>>")
ma=re.findall(r"(\d{3}-\d{8})",strb)
mab=re.findall(r"(\d{4}-\d{7})",strb)
maa=re.findall(r"((\d{3}-\d{8})|(\d{4}-\d{7}))",strb)
print(ma)
print(maa)
print(mab)
结果:
===================== RESTART: D:\Python\Python37\re1.py =====================
<re.Match object; span=(0, 1), match='d'>
i an ggef fgdei fggeffd
('i an ggef fgdei fggeffd', 2)
..............
<re.Match object; span=(0, 12), match='010-33434344'>
010-33434344
010
33434344
>>>>>>>>>>>>
['020-45343422', '010-53247654']
[('0534-3456776', '', '0534-3456776'), ('020-45343422', '020-45343422', ''), ('010-53247654', '010-53247654', '')]
['0534-3456776']
>>>
dd='''sdxxhello
xxfsdfxxworldxxasdf'''
d=re.findall('xx(.*?)xx',dd)
print(d)
d=re.findall('xx(.*?)xx',dd,re.S) #re.S表示跨行匹配,没有则不跨行
print(d)
结果:
['fsdf']
['hello\n', 'world']
>>>
re.match(r'.',"abvd") #匹配最左边开始的字符
re.search(r'.',"abdd") #匹配整个字符串中第一个符合条件的字符
re.findall(r'.',"abcd") #匹配整个字符串中所有符合条件的字符