Python 正则表达式 (...) 符号

正文

(...) 用来匹配括号内的任意正则表达式。

之前我们已经介绍过了 . 符号在正则表达式中的用法,其用来匹配除了 \n 字符以外的单个字符。那么对于 ...,显然它可以匹配除了 \n 字符以外的任意三个字符的组合。

示例1------ … 字符

import re

str1 = 'abc(def)opq'
print(re.search('...', str1))
"""
result:
<re.Match object; span=(0, 3), match='abc'>
"""

显然,匹配到的是开头的三个字符 abc

示例2

接下来,我们研究一下 (...) 字符的含义。

import re

str1 = 'abc(def)opq'
print(re.search('(...)', str1))
"""
result:
<re.Match object; span=(0, 3), match='abc'>
"""

很明显,也匹配到了开头的三个字符 abc

示例3

import re

str1 = 'abc(def)opq'
print(re.search('\(...\)', str1))
str1 = 'abc(defg)opq'
print(re.search('\(...\)', str1))
"""
result:
<re.Match object; span=(3, 8), match='(def)'>
None
"""

当我们给 () 均加上转义符号 \ 时,就会配到 (def) 字符串。但是 () 中的字符串数量从三个到四个时,就匹配不到任何结果了,因为 ... 只匹配三个字符。 但是一旦我们加上了转义符号 \\(...\) 的含义就不再是 (...) 了,这里仅仅是为了说明这个事情。读者务必需要注意。

示例4

我们回归到原本的 (...) 符号。

import re

str1 = 'abc(def)opq'
print(re.search('abc(...)', str1))
"""
result:
<re.Match object; span=(0, 6), match='abc(de'>
"""

此时,匹配到了字符串 abc(de,因为当匹配的时候我们开头有了 abc 三个字符,根据示例 2 中的结果,(...) 会匹配到后面的三个字符。因此匹配到了 (de,最终将二者的组合字符串 abc(de 作为结果进行了输出。

示例5

我们这里做一个延申,如果要匹配到上述整个字符串该怎么办呢?我们只需要将括号中的 ... 变成 .....

import re

str1 = 'abc(def)opq'
print(re.search('abc(.....)opq', str1))
"""
result:
<re.Match object; span=(0, 11), match='abc(def)opq'>
"""

对比上述所有示例,我们可以看到,对于 (...) 形式,() 实际上并没有意义,只是表示使用 () 中的 ... 符号进行匹配。

有些小伙伴可能会问,那既然没有意义,为什么还需要使用 () 呢?因为,如果你不是用 (...) 而直接使用 ...Python 就会将你的匹配对象视作 ... 符号,而不是把 ... 符号看作是除了 \n 字符以外的任意符号。

如果大家觉得有用,就请点个赞吧~

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

勤奋的大熊猫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值