我正在尝试查看一个字符串是否包含3个连续的单词(由空格分隔且不包含数字),但我构建的正则表达式似乎无法工作:
print re.match('([a-zA-Z]+\b){3}', "123 test bla foo")
None
由于该字符串包含“test bla foo”这三个单词,因此应该返回true。
如何实现最佳效果?
做:
(?:[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]+
(?:[A-Za-z]+[\s\b]){3}
。 - Subbeh这是一个更好的选择。
它包括带连字符或撇号的单词,如“don't”或“mother-in-law”
([^\s]+ ){2}[^\s]+
我使用这个来选择字符串的第一个单词:
^(?:[^\ ]+\ ){3}
我使用空格来定义和分隔每个单词。
[^\ ]+
:至少一个非空格字符,后跟一个空格符\
。
然后,您只需要输入所需的单词数:{3}
它运行得非常好。
re.search()
而不是re.match()
- 后者将从字符串的开头开始。 - alecxe