【问题标题】:Regular expression - range of the match正则表达式 - 匹配范围
【发布时间】:2016-05-11 00:09:44
【问题描述】:

我有以下正则表达式:

re.findall(r'(\b[A-Za-z][a-z]{3,10}\b)', string_var)

我预计这个正则表达式将返回长度从3 到10 的匹配项。但是,它会返回长度从 4 到 11 的单词的匹配项。

因此,我们是否将上述正则表达式解读为匹配以大写或小写字母开头,后跟长度从3 到10 的字母?换句话说,将第一个字母作为扩展范围的额外字母?

谢谢。

【问题讨论】:

  • 您的匹配项长度为 4 到 11 个字母。 {3, 10} 量词(即至少三个且不超过十个)仅适用于第二个字符集。
  • 感谢您的评论。抱歉,我输入了 8 而不是 11,输入了 7 而不是 10。我已经在我的问题中解决了这个问题

标签: python regex


【解决方案1】:

是的。

你的正则表达式是

(\b[A-Za-z][a-z]{3,10}\b)

现在,分组括号不会影响匹配,因此我们可以忽略它们。而\b 是一个“零宽度”匹配运算符——它匹配从一个字符类到另一个字符类的转换——因此它实际上并不对应于任何字符。我们可以忽略它们。剩下的就是:

[A-Za-z][a-z]{3,10}

这是两个字符类,第二个带有重复说明符后缀:

  1. [A-Za-z] - 匹配一个字符,大写或小写拉丁字母。

  2. [a-z]{3,10} - 匹配至少 3 个,最多 10 个字符,小写 a-z

所以总的来说,您匹配 1 + [3,10] 个字符。最小匹配为 4 个字符,最大匹配为 11 个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多