正则表达式
正则表达式就是用一些特殊的符号去筛选想要的数据,简称正则
字符组
[0123456789] [0-9] \d # 匹配0到9之间的数字 [a-z] # 匹配a-z之间的字母 [A-Z] # 匹配A-Z之间的字母
字符
. # 匹配除换行符之外的任意字符 \w # 匹配字母、数字、下划线 \W # 匹配除字母、数字、下划线之外的字符 \d # 匹配0-9之间的数字 \D # 匹配除数字之外的字符 \n # 匹配一个换行符 ^ # 匹配字符串的开始 $ # 匹配字符串的结尾 a|b #匹配字符a或字符b [...] # 匹配字符组中的字符 [^...] # 匹配除了字符组中的字符
量词
1.量词只能影响前面的一个字符
2.量词不能单独使用,必须配合其他字符串使用
* 重复零次或更多次
+ 重复一次或者更多次
? 重复零次或者一次
{n} 重复n次
{n,} 重复n次或者更多次
{n,m} 重复n到m次
贪婪匹配和非贪婪匹配
贪婪匹配:在满足匹配时,匹配尽可能长的字符串(默认采用贪婪匹配)
非贪婪匹配:.*?,在满足匹配时,匹配尽可能短的字符串
<script>123</script> # 待匹配字符 # 正则表达式是:<.*> 匹配结果为:<script>123</script> #贪婪匹配 <script>123</script> # 待匹配字符 # 正则表达式是:<.*?> 匹配结果为:<script> # 非贪婪匹配
转义字符
一个斜杠 '\' 只能转义一个字符
待匹配字符:\n 正则表达式:\n 匹配结果:False 待匹配字符:\n 正则表达式:\\n 匹配结果:True 待匹配字符:'\\n' 正则表达式:"\\\\n" 匹配结果:True
在python中转义字符推荐使用:r'\n' '\\n'
re模块
1.re模块是内置的模块,可以直接使用的
2.在python中,要想使用正则需要借助re模块:import re
re.findall:返回所有满足匹配条件的结果,放在列表里,如果匹配不到就返回空列表[ ]
re.search:只会找到第一个匹配值,然后通过group()进行匹配,如果找不到就返回None
re.match:与search用法相同,但是只有匹配值在第一个才能输出,不然会报错
re.split('[ab]', 'abcd') :这个先按a进行分割,得到bcd后,按b进行分割,得到cd,最终的结果 ['', '', 'cd']
# findall的优先级查询: import re ret = re.findall('www.(baidu|oldboy).com', 'www.oldboy.com') print(ret) # ['oldboy'] 这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可 ret = re.findall('www.(?:baidu|oldboy).com', 'www.oldboy.com') print(ret) # ['www.oldboy.com']
分组
无名分组
# 对于findall,它具有分组优先展示, 也称之为是无名分组 res = re.findall('^[1-9]\d{14}(\d{2}[0-9x]?)$','110105199812067023') print(res) # ['023'] # 当加了?:会取消优先展示 res = re.findall('^[1-9]\d{14}(?:\d{2}[0-9x]?)$','110105199812067023') print(res) # ['110105199812067023']
有名分组
res = re.search('^[1-9]\d{14}(?P<month>\d{2}[0-9x]?)$','110105199812067023') print(res) # <_sre.SRE_Match object; span=(0, 18), match='110105199812067023'> # print(res.group(1)) print(res.group()) # 110105199812067023 print(res.group(1)) # 023 print(res.group('month')) # 023
标签:字符,匹配,正则表达式,res,re,print,findall From: https://www.cnblogs.com/Lucky-Hua/p/17467411.html