何为正则表达式?
正则表达式为高级的文本模式匹配、抽取、与/或文本形式的搜索和替换功能提供了基础。
简单来说,正则表达式(Regular Expression,简称regex)是一些由字符和特殊符号组成的字符串,它们描述了模式的重复或者表述多个字符,正则表达式能按照某种模式匹配一系列有相似特征的字符串。
python re模块提供正则功能
以下是一些基本使用:
#正则表达式元字符
1) . (通配符)除了换行符外均可代指
1
2
|
#ret = re.findall('w..l',s)
#print ret
|
2) ^ 开始匹配(从开头开始匹配)
1
2
|
#ret = re.findall('^h...o','hejaodflhello')
#print(ret)
|
3) $ 从结尾匹配
1
2
|
# ret = re.findall('a..x$','afjdlajfa faf alox')
# print ret
|
4) * 重复匹配(*前字符[0 正无穷多])
1
2
|
# ret = re.findall('ab*','falfa;ldfafbaalexlil')
# print(ret)
|
5) + 匹配重复[1, 无穷多]
1
2
3
4
|
# ret = re.findall('ab+','falfa;ldfabfbaabbleab2xlil')
# print(ret)
# ret = re.findall('a+b','falfa;ldfabfbaabbleab2xla2bil')
# print ret
|
6) ? [0,1] 次
1
2
|
# ret = re.findall('a?b','falfa;ldfabfbaabblea3b2xlil')
# print ret
|
7) { } 指定前面字符出现的次数
1
2
3
4
|
# ret = re.findall('a{5}b',"abxkaaaaab,abbbbbaaabblfjdasssssbwl")
# print ret
# ret = re.findall('a{1,3}b',"abxkaaab,abbbbbabblfjdaabwl")
# print ret
|
8) 字符集及范围匹配 [ ]
#或关系选取
1
2
|
# ret = re.findall('a[c,d]x','acxbaadx')
# print ret
|
范围选取
[0-9] 等同于\d 匹配任何十进制数字 \D与之相反匹配任何非数值型的数字
[a-z] 匹配小与字母
[A-Z]匹配大写字母
[a-zA-Z0-9] 等同于 \w 匹配任何字母数字和字符 \W与之相反
\s 匹配任何空格字符 等同于[\n\t\r\v\f] \S 与之相反
1
2
|
# ret = re.findall('[a-z]','abcdef')
# print ret
|
#[ ]取消元字符的特殊功能有三例除外(\ ^ -)
1
2
3
4
5
6
|
# ret = re.findall('[w,*,.,,]','wa,x.dx*')
# print ret
#取数字大小写字母
# ret = re.findall('[0-9a-zA-Z]','123tsAD')
# print ret
#结果:['1', '2', '3', 't', 's', 'A', 'D']
|
总结:
* 等同于 {0,无穷多} 也等价于 {0,}
+ 等价于 {1,无穷} 也等价于 {1,}
? 等价于 {0,1}
取反
1
2
3
4
5
|
# ret = re.findall('^t','t12iu3tsAD') #正常的取t开头的字符t
# print ret
# ret = re.findall('[^t,3]','t12iu3tsAD') #取除t或3外的字符
# print ret
#结果: ['1', '2', 'i', 'u', 's', 'A', 'D']
|
\ 反斜杠功能
#功能有二:
#反斜杠后边跟随元字符去除特殊功能
#反斜杠后跟部分普通字符实现特殊功能
#\b 匹配边界 任何特殊字符边界
1
2
3
4
|
# print(re.findall(r'I\b','Hello,I am a LI$sT.I,'))
#结果:['I', 'I', 'I']
# print(re.findall(r'\bI','Hello Iam a LI$sTI,'))
#结果: ['I']
|
re的常用方法
1、re.match方法
只在字符串开始匹配,也返回匹配到的第一个对象,匹配到返回
否则返回None
1
2
3
|
obj
=
re.
compile
(
"\.com"
)
ret
=
obj.match("
print
ret
#结果None
|
2、re.search方法与re.findall
#re.search() 符合第一个条件的,返回对象,并通过group方法获取匹配到的结果
#re.findall() 把所有符合的结果放入列表 中。
1
2
3
4
|
# ret = re.search('(?P<id>\d{3})/(?P<name>\w{3})','weeew34tttt123/pppp')
# print(ret.group()) #结果:123/ppp
# print(ret.group('id')) #结果:123
# print(ret.group('name')) #结果 ppp
|
1
2
|
#ret = re.findall('(?P<id>\d{3})/(?P<name>\w{3})','weeew34tttt123/pppp')# print ret
#结果是所符合的存在于列表中:[('123', 'ppp')]
|
3、re.compile 先编译成匹配对象可以供其他方法多次调用
1
2
3
|
obj
=
re.
compile
(
'\.com'
)ret
=
obj.findall(
"www.baidu.com,https://www.google.com.cn"
)
print
ret
#结果['.com', '.com']
ret
=
obj.search(www.baidu.com,https:
/
/
www.google.com.cn).group()
print
ret
#结果.com
|
本文只是简单说明了正则表达式的基本应用。更多扩展用法请参考这里。https://deerchao.net/tutorials/regex/regex.htm