构建正则表达式以识别至少给定的间隔

时间:2017-04-21 14:28:58

标签: python regex

我有一个正则表达式,由一个单词和一系列单词组成。

例如:

pattern = 'word \\w+ \\w+ \\w+"
result = [text[match.start():match.end()] for match in re.finditer(pattern, text)]

如何修改正则表达式,以便当区间中的元素数量较少时也能识别它?例如,如果单词位于字符串的末尾,我希望它也能返回该区间。

如果可能的话,总是尽可能地返回最佳模式。

1 个答案:

答案 0 :(得分:1)

您的'word \\w+ \\w+ \\w+"正则表达式与word匹配,然后再与3个“单词”匹配(空格分隔)。您想要匹配这些单词中的0到3个。使用

re.findall(r'word(?:\s+\w+){0,3}', s)

或者,要在“字词”之间允许任何非字字符,请将\s替换为\W

re.findall(r'word(?:\W+\w+){0,3}', s)

<强>详情:

  • word - word字符串
  • (?:\s+\w+){0,3} - 0到3个序列({0,3}limiting quantifier的贪婪版本,它将匹配尽可能多的出现次数):
    • \s+ - 1+空格
    • \w+ - 一个或多个单词字符。

请参阅regex demo