我有一个正则表达式,由一个单词和一系列单词组成。
例如:
pattern = 'word \\w+ \\w+ \\w+"
result = [text[match.start():match.end()] for match in re.finditer(pattern, text)]
如何修改正则表达式,以便当区间中的元素数量较少时也能识别它?例如,如果单词位于字符串的末尾,我希望它也能返回该区间。
如果可能的话,总是尽可能地返回最佳模式。
答案 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。