Python测试开发预习课8/6--正则表达式2

本文深入探讨了正则表达式的各种应用场景,包括基础匹配、分组、边界、或匹配等,通过实例演示了如何使用Python的re模块进行字符串搜索、匹配及提取,是正则表达式学习者的实用宝典。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、[] | :或的关系

知识点:
match 或者search只能找到一个匹配结果
findall可以匹配多个结果

>>> import  re #re是匹配
>>> re.match(r"[abc]x","ax")
<_sre.SRE_Match object; span=(0, 2), match='ax'>
>>> re.match(r"[abc]x","bx")
<_sre.SRE_Match object; span=(0, 2), match='bx'>
>>> re.match(r"[abc]x","cx")
<_sre.SRE_Match object; span=(0, 2), match='cx'>

在这里插入图片描述

注意:“或”的关系必须得有这么一个东西

>>> import re
>>> re.findall(r"[a-z][1-9]","i1a2x3@03")
['i1', 'a2', 'x3']
这里要满足一个字母后面有一个数字,所以才能匹配到。

在这里插入图片描述

>>> re.findall(r"[a-z][1-9]","iad23@")
['d2']
>>> re.findall(r"[a-z][1-9]","iad@")
[]
>>> re.findall(r"[a-z][1-9]","iad2")
['d2']

在这里插入图片描述

2、同时匹配字母和数字
>>> re.findall(r"[a-zA-Z0-9]","i1a2x3@03AZX")
['i', '1', 'a', '2', 'x', '3', '0', '3', 'A', 'Z', 'X']

在这里插入图片描述

3、字母数字连着匹配多个“+”
>>> re.findall(r"[a-zA-Z0-9]+","i1a2x3@03AZX")
['i1a2x3', '03AZX']

在这里插入图片描述

Search匹配:
>>> re.search(r"[a-zA0-9]+","i1a2x3@03AZX")
<_sre.SRE_Match object; span=(0, 6), match='i1a2x3'>

在这里插入图片描述

4、“^”在方括号内表示取反
>>> re.search(r"[^a-zA0-9]+","i1a2x3@03AZX")
<_sre.SRE_Match object; span=(6, 7), match='@'>

在这里插入图片描述

“^”在方括号外表示必须从第一个字符开始匹配,只要匹配到了就会直接返回。
>>> re.search(r"abc","123abc456")
<_sre.SRE_Match object; span=(3, 6), match='abc'>
>>> re.search(r"^abc","123abc456")
>>> re.search(r"^abc","abc456")
<_sre.SRE_Match object; span=(0, 3), match='abc'>

在这里插入图片描述

5、“$”结尾匹配
>>> re.search(r"abc$","abc456")
>>> re.search(r"abc$","456abc")
<_sre.SRE_Match object; span=(3, 6), match='abc'>
>>> re.search(r"^abc$","456abc")
>>> re.search(r"^abc$","abc")#开头和结尾都匹配,就是恰好的意思
<_sre.SRE_Match object; span=(0, 3), match='abc'>

在这里插入图片描述

6、"^…$"开头和结尾都匹配(精确匹配)
>>> re.search(r"^abc$","abcabc")
>>> re.search(r"^a123cdf$","a123cdf")
<_sre.SRE_Match object; span=(0, 7), match='a123cdf'>
>>> re.search(r"^a123cdf$","a123cdf1")
>>> re.search(r"^a123cdf$","1a123cdf")
>>> re.search(r"^a123cdf$","123cdf")

在这里插入图片描述

>>> re.findall(r"^a.*?c","abcaeiec")
['abc']
>>> re.findall(r"a.*?c","abcaeiec")
['abc', 'aeiec']

在这里插入图片描述

7、“a.b”中间的点是任意匹配
>>> re.search(r"a.b","a*b")
<_sre.SRE_Match object; span=(0, 3), match='a*b'>
>>> re.search(r"a.b","a1b")
<_sre.SRE_Match object; span=(0, 3), match='a1b'>
>>> re.search(r"a.b","aAb")
<_sre.SRE_Match object; span=(0, 3), match='aAb'>
>>> re.search(r"a.b","a b")
<_sre.SRE_Match object; span=(0, 3), match='a b'>
>>> re.search(r"a.b","a,b")
<_sre.SRE_Match object; span=(0, 3), match='a,b'>
>>> re.search(r"a.b","a\nb")#\n这个不行

在这里插入图片描述

>>> re.search(r"a.+b","a123456b789b")
<_sre.SRE_Match object; span=(0, 12), match='a123456b789b'>
>>> re.search(r"a.+?b","a123456b789b")
<_sre.SRE_Match object; span=(0, 8), match='a123456b'>

在这里插入图片描述

8、匹配\n
>>> re.search(r"a.b","a\nb",re.DOTALL)
<_sre.SRE_Match object; span=(0, 3), match='a\nb'>

在这里插入图片描述

9、group分组匹配
>>> re.search(r"a\d+c","a123c")
<_sre.SRE_Match object; span=(0, 5), match='a123c'>
>>> re.search(r"a(\d+)c","a123c")
<_sre.SRE_Match object; span=(0, 5), match='a123c'>
>>> re.search(r"a(\d+)c","a123c").group()
'a123c'
>>> re.search(r"a(\d+)c","a123c").group(0)
'a123c'
>>> re.search(r"a(\d+)c","a123c").group(1)
'123'
>>> re.search(r"(a)(\d+)(c)","a123c").group(1)
'a'
>>> re.search(r"(a)(\d+)(c)","a123c").group(2)
'123'
>>> re.search(r"(a)(\d+)(c)","a123c").group(3)
'c'
>>> re.search(r"(a)(\d+)(c)","a123c").group(4)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: no such group
>>> re.search(r"((a)(\d+)(c))","a123c").group(4)
'c'

在这里插入图片描述

10、findall分组匹配
>>> re.findall(r"abc\d+","abc1,abc2,abc3")
['abc1', 'abc2', 'abc3']
>>> re.findall(r"abc(\d+)","abc1,abc2,abc3")
['1', '2', '3']
>>> re.findall(r"(abc)(\d+)","abc1,abc2,abc3")
[('abc', '1'), ('abc', '2'), ('abc', '3')]
>>> re.findall(r"((abc)(\d+))","abc1,abc2,abc3")
[('abc1', 'abc', '1'), ('abc2', 'abc', '2'), ('abc3', 'abc', '3')]

在这里插入图片描述

11、\b边界匹配
>>> re.findall(r"boy","iboy,youboy boy girl")
['boy', 'boy', 'boy']
>>> re.findall(r"\bboy\b","iboy,youboy boy girl")
['boy']
>>> re.search(r"\bboy\b","iboy,youboy boy girl")
<_sre.SRE_Match object; span=(12, 15), match='boy'>

在这里插入图片描述

忽略大小写匹配
>>> re.search(r"\b\w+\b","I am a boy!")
<_sre.SRE_Match object; span=(0, 1), match='I'>
>>> re.findall(r"\b\w+\b","I am a boy!")
['I', 'am', 'a', 'boy']

在这里插入图片描述

12、或匹配
>>> re.search(r"[ab]","b")
<_sre.SRE_Match object; span=(0, 1), match='b'>
>>> re.search(r"[abcd]","ab")
<_sre.SRE_Match object; span=(0, 1), match='a'>
>>> re.search(r"ab|cd","ab")
<_sre.SRE_Match object; span=(0, 2), match='ab'>
>>> re.search(r"ab|cd","cd")
<_sre.SRE_Match object; span=(0, 2), match='cd'>
>>> re.search(r"ab|cd11","cd11")
<_sre.SRE_Match object; span=(0, 4), match='cd11'>
>>> re.search(r"ab|cd11","ab11")
<_sre.SRE_Match object; span=(0, 2), match='ab'>
>>>
>>> re.search(r"(ab|cd)11","ab11")
<_sre.SRE_Match object; span=(0, 4), match='ab11'>
>>> re.search(r"(ab|cd)11","cd11")
<_sre.SRE_Match object; span=(0, 4), match='cd11'>
>>> re.search(r"(ab|cd)11","ab11cd11")
<_sre.SRE_Match object; span=(0, 4), match='ab11'>
>>> re.findall(r"(ab|cd)11","ab11cd11")
['ab', 'cd']

在这里插入图片描述

>>> re.findall(r"(a-z|0-9)+","abcd123")
[]
>>> re.findall(r"([a-z]|[0-9])+","abcd123")
['3']
>>> re.findall(r"([a-z]|[0-9])","abcd123")
['a', 'b', 'c', 'd', '1', '2', '3']
>>> re.findall(r"(ab|cd)11","ab11")
['ab']
>>> re.search(r"(ab|cd)11","ab11")
<_sre.SRE_Match object; span=(0, 4), match='ab11'>
>>> re.findall(r"(\w)+","abcd123")
['3']
>>> re.findall(r"(\w+)","abcd123")
['abcd123']

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值