正则表达式

正则表达式

正则表达式就是用一些特殊的符号去筛选想要的数据,简称正则

字符组

[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

 

posted @   Maverick-Lucky  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示