Python正则表达式

传送门
用来匹配字符串的

.                    匹配任意字符(不包括换行符)	'py.'可以匹配'pyc''pyo''py!'等等
^                    匹配开始位置,多行模式下匹配每一行的开始		^\d表示必须以数字开头。
$                    匹配结束位置,多行模式下匹配每一行的结束		\d$表示必须以数字结束。
*                    匹配前一个元字符0到多次
+                    匹配前一个元字符1到多次
?                    匹配前一个元字符01{m,n}                匹配前一个元字符m到n次		\d{3,8}表示3-8个数字,例如'1234567'
\\                   转义字符,跟在其后的字符将失去作为特殊元字符的含义,例如\\.只能匹配.,不能再匹配任意字符
	由于'-'是特殊字符,要用'\'转义,匹配'010-12345' 是\d{3}\-\d{3,8}
[]                   字符集,一个字符的集合,可匹配其中任意一个字符		[0-9a-zA-Z\_]可以匹配一个数字、字母或者下划线
|                    逻辑表达式 或 ,比如 a|b 代表可匹配 a 或者 b	(P|p)ython可以匹配'Python'或者'python'(...)                分组,默认为捕获,即被分组的内容可以被单独取出,默认每个分组有个索引,从 1 开始,按照"("的顺序决定索引值
(?iLmsux)            分组中可以设置模式,iLmsux之中的每个字符代表一个模式,用法参见 模式 I
(?:...)              分组的不捕获模式,计算索引时会跳过这个分组
(?P<name>...)        分组的命名模式,取此分组中的内容时可以使用索引也可以使用name
(?P=name)            分组的引用模式,可在同一个正则表达式用引用前面命名过的正则
(?#...)              注释,不影响正则表达式其它部分,用法参见 模式 I
(?=...)              顺序肯定环视,表示所在位置右侧能够匹配括号内正则
(?!...)              顺序否定环视,表示所在位置右侧不能匹配括号内正则
(?<=...)             逆序肯定环视,表示所在位置左侧能够匹配括号内正则
(?<!...)             逆序否定环视,表示所在位置左侧不能匹配括号内正则
(?(id/name)yes|no)   若前面指定id或name的分区匹配成功则执行yes处的正则,否则执行no处的正则
\number              匹配和前面索引为number的分组捕获到的内容一样的字符串
\A                   匹配字符串开始位置,忽略多行模式
\Z                   匹配字符串结束位置,忽略多行模式
\b                   匹配位于单词开始或结束位置的空字符串
\B                   匹配不位于单词开始或结束位置的空字符串
\d                   匹配一个数字, 相当于 [0-9]		'00\d'可以匹配'007'
\D                   匹配非数字,相当于 [^0-9]
\s                   匹配任意空白字符, 相当于 [ \t\n\r\f\v]
\S                   匹配非空白字符,相当于 [^ \t\n\r\f\v]
\w                   匹配数字、字母、下划线中任意一个字符, 相当于 [a-zA-Z0-9_]
\W                   匹配非数字、字母、下划线中的任意字符,相当于 [^a-zA-Z0-9_]

函数模块

match()方法判断是否匹配,如果匹配成功,返回一个Match对象,否则返回None
>>> import re
>>> re.match(r'^\d{3}\-\d{3,8}$', '010-12345')
<_sre.SRE_Match object; span=(0, 9), match='010-12345'>
>>> re.match(r'^\d{3}\-\d{3,8}$', '010 12345')
>>>

test = '用户输入的字符串'
if re.match(r'正则表达式', test):
    print('ok')
else:
    print('failed')
切分字符串
>>> re.split(r'\s+', 'a b   c')
['a', 'b', 'c']

>>> re.split(r'[\s\,\;]+', 'a,b;; c  d')
['a', 'b', 'c', 'd']
分组
如果正则表达式中定义了组,就可以在Match对象上用group()方法提取出子串来。
注意到group(0)永远是原始字符串,group(1)、group(2)……表示第12、……个子串。
>>> m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')
>>> m
<_sre.SRE_Match object; span=(0, 9), match='010-12345'>
>>> m.group(0)
'010-12345'
>>> m.group(1)
'010'
>>> m.group(2)
'12345'

>>> t = '19:05:30'
>>> m = re.match(r'^(0[0-9]|1[0-9]|2[0-3]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])$', t)
>>> m.groups()
('19', '05', '30')
贪婪匹配变非贪婪匹配
>>> re.match(r'^(\d+)(0*)$', '102300').groups()
('102300', '')
>>> re.match(r'^(\d+?)(0*)$', '102300').groups()
('1023', '00')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python正则表达式是一种强大的字符串处理工具,它可以用于在文本中查找、替换和提取特定模式的字符串。在Python中使用正则表达式,需要先导入`re`模块。 下面是一个简单的示例代码,演示了如何使用正则表达式在字符串中匹配特定的模式: ```python import re # 定义一个待匹配的字符串 string = "Hello, my email address is example@example.com" # 定义一个正则表达式模式,用于匹配邮箱地址 pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b' # 使用re模块的findall()方法进行匹配 matches = re.findall(pattern, string) # 输出匹配的结果 print(matches) ``` 运行以上代码,输出结果会是`['example@example.com']`,即匹配到了字符串中的邮箱地址。 在正则表达式中,可以使用一些特殊字符和元字符来构建匹配模式。例如,`r'\b'`表示单词边界,`[A-Za-z0-9._%+-]`表示匹配字母、数字、点、下划线、百分号、加号和减号等字符。 除了匹配字符,还可以使用一些特殊的元字符来表示数量和位置。例如,`+`表示前面的字符出现一次或多次,`*`表示前面的字符出现零次或多次,`{2,}`表示前面的字符出现至少两次。 以上只是简单介绍了Python正则表达式的基本用法,实际上正则表达式还有很多高级用法和特性。你可以参考Python官方文档中关于`re`模块的详细说明来深入学习和理解正则表达式的使用方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王蒟蒻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值