在正则表达式中能帮助我们表示匹配的内容的符号就是正则中的元字符
[ ] : 字符组(描述的是一个位置上能出现的可能性) 与[ ^]:非字符组
\d: 表示匹配的所有数字(0-9) (digit)
\w: 表示匹配的是数字字母下划线 (word)
\s: 表示匹配表示空白
_\t\n: 匹配到(空格,Tab和回车)
\D: 表示只要不是数字都可以匹配
\W: 表示只要不是数字字母下划线就可以匹配
\S: 表示只要不是空白就可以匹配
[\d\D] [\s\D] [\w\W]: 表示匹配所有
^: 匹配字符串的开始
$: 匹配字符串的结尾
. :表示匹配出换行符外的所有
|: 表示或,(ad|bc)匹配ad或bc,但如果ad匹配成功了就不会去匹配bc,所以如果两个规则有重叠部分,总是将长的放前面
**\ . ** : 中的\可以取消特殊符,单纯表示一个点.
( ): 约束,如www.(taobao|baidu|jingdong).com
贪婪匹配(回溯算法)
非贪婪(惰性)匹配----> (量词+?)
转义符
正则实例
re.findall (‘正则表达式‘ , ‘内容字符串‘)
import re
ret1=re.findall(‘1\d\d‘,‘167jjh767yhg17926‘)
print(ret1) #[‘167‘, ‘179‘]
ret2=re.findall(‘1(?:\d)(\d)‘,‘167jjh767yhg17926‘) #设置分组优先
print(ret2) #[‘7‘, ‘9‘]
re.search(‘正则表达式‘ , ‘内容字符串‘)
import re
ret1=re.search(‘1\d\d‘,‘167jjh767yhg17926‘)
print(ret3.group()) #167
ret2=re.search(‘1(\d)\d‘,‘167jjh767yhg17926‘)
print(ret4.group()) #167
re.match(‘正则表达式‘ , ‘内容字符串‘)
与re.search对比,re.match在正则前默认加上了元字符^
import re
#第一种,会报错
ret1=re.match(‘1\d\d‘,‘467jjh767yhg17926‘)
print(ret1.group()) #AttributeError: ‘NoneType‘ object has no attribute ‘group‘
#第二种,匹配成功,正常运行
ret2=re.match(‘1\d\d‘,‘167jjh767yhg17926‘)
print(ret2.group()) #167
re.compile(‘正则表达式‘ )
import re
res=re.compile(‘\d+‘)
ret=res.findall(‘167jjh767yhg17926‘)
print(ret)
re.finditer(‘正则表达式‘ )
ret=re.finditer(‘\d+‘,‘167jjh767yhg17926‘)
for i in ret: #循环iteration
print(i.group()) #通过.group方法进行取值
#最终结果 #167
#767
#17926
可以既从时间上节省,也可以从空间上节省
import re
res=re.compile(‘\d+‘)
ret=res.finditer(‘167jjh767yhg17926‘)
for i in ret:
print(i.group()) #最终结果与上一个一致
re.split(‘正则表达式‘ , ‘内容字符串‘)
import re
ret=re.split(‘\d+‘,‘167jjh767yhg17926‘)
print(ret) #[‘‘, ‘jjh‘, ‘yhg‘, ‘‘]
re.sub(‘正则表达式‘ , ‘ 要替换的字符串‘ , ‘内容字符串‘ , ‘替换的次数‘)
import re
ret=re.sub(‘[a-zA-Z]+‘,‘yzh‘,‘167jjh767yhg17926‘,2)
print(ret) #167yzh767yzh17926
re.subn(‘正则表达式‘ , ‘ 要替换的字符串‘ , ‘内容字符串‘ )
import re
ret=re.subn(‘[a-zA-Z]+‘,‘yzh‘,‘167jjh767yhg17926‘)
print(ret) #(167yzh767yzh17926,2)
原文:https://www.cnblogs.com/Programmatic-yuan/p/12931523.html