【问题标题】:Python regex. * doesn't work for second matchPython 正则表达式。 * 不适用于第二场比赛
【发布时间】:2022-12-24 04:36:32
【问题描述】:

据我所知,* 表示在正则表达式中匹配次数超过 0 次。 {n,m} 表示等于或大于 n 次出现且等于或小于 m 次出现。

但是下面的代码有些奇怪。 我想做的是找到数字。

0 >>> import re
1 >>> 
2 >>> re.search(r'[a-z]{4,6}[0-9]{2,6}', 'bird99')
3 <re.Match object; span=(0, 6), match='bird99'>
4 >>> re.search(r'[0-9]{2,6}', 'bird99')
5 <re.Match object; span=(4, 6), match='99'>
6 >>> re.search(r'[0-9]{0,6}', 'bird99')
7 <re.Match object; span=(0, 0), match=''>
8 >>> re.search(r'[0-9]*', 'bird99')
9 <re.Match object; span=(0, 0), match=''>

我希望在结果行号 7 和 9 上匹配 99,但它没有匹配。 任何人都可以解释这个结果吗?

提前致谢。

【问题讨论】:

  • 你想匹配0或更多数字,因此这与字符串开头的空字符串完美匹配。
  • 请注意,span(0,0) 清楚地表明匹配项位于位置零且长度为零。
  • 这意味着 * 可以匹配每个字符串,因为任何字符串都包含 0 次出现的任何模式,对吧?

标签: python regex python-re


【解决方案1】:

r[0-9]*匹配零个或多个ASCII 数字。 re.search 找到了第一的匹配,这是零位数字。比较 re.findall 的结果:

>>> re.search(r'[0-9]*', 'bird99')
<re.Match object; span=(0, 0), match=''>
>>> re.findall(r'[0-9]*', 'bird99')
['', '', '', '', '99', '']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多