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"))
>>> print(re.search(r"I\Z","I'm a never"))
None
>>> print(re.search(r"r\Z","I'm a never"))
>>>
\b匹配一个单词的边界,就是单词和空格间的位置
\B匹配非单词的边界
>>> print(re.search(r'er\b',"never"))
>>> 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 =====================
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 =====================
i an ggef fgdei fggeffd
('i an ggef fgdei fggeffd', 2)
..............
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") #匹配整个字符串中所有符合条件的字符