正则表达式:匹配3个连续单词

6
我正在尝试查看一个字符串是否包含3个连续的单词(由空格分隔且不包含数字),但我构建的正则表达式似乎无法工作:
print re.match('([a-zA-Z]+\b){3}', "123 test bla foo")
None

由于该字符串包含“test bla foo”这三个单词,因此应该返回true。

如何实现最佳效果?


顺便提一下:使用re.search()而不是re.match() - 后者将从字符串的开头开始。 - alecxe
3个回答

11

做:

(?:[A-Za-z]+ ){2}[A-Za-z]+
  • (?:[A-Za-z]+ ){2}:非捕获组 (?:[A-Za-z]+ ) 匹配一个或多个字母后跟一个空格,{2} 匹配两个这样连续的组。

  • [A-Za-z]+ 匹配在前两个单词之后的一个或多个字母字符,构成第三个单词。

演示

如果您想让单词由任何空白符号分隔而不仅仅是空格:

(?:[A-Za-z]+\s){2}[A-Za-z]+

谢谢heemayl,这个可行。我只是想了解为什么这样的东西不起作用 (?:[A-Za-z]+[\s\b]){3} - Subbeh
@Subbeh 需要在第三个单词后面加一个空格。 - heemayl

0

这是一个更好的选择。
它包括带连字符或撇号的单词,如“don't”或“mother-in-law”

([^\s]+ ){2}[^\s]+

0

我使用这个来选择字符串的第一个单词:

^(?:[^\ ]+\ ){3}

我使用空格来定义和分隔每个单词。

[^\ ]+:至少一个非空格字符,后跟一个空格符\。 然后,您只需要输入所需的单词数:{3}

它运行得非常好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接