我正在尝试使用RegEx从文本中获取以下模式:
John Doe
JOHN DOE
Sam John Watson
Sam John Lilly Watson
SAM JOHN WATSON
SAM JOHN LILLY WATSON
输入数据仅包含一行,我需要在其中查找以上模式。
有关模式的更多信息
我尝试过的事情:
import re
re.findall("[A-Z][A-Za-z]+ [A-Z][A-Za-z]+ [A-Za-z]* [A-Za-z]*", text)
这将正确识别输入,例如:
Sam Peters John Doe
SAM WINCH DAN BROWN
但输入少于4个单词时失败。
答案 0 :(得分:3)
您的模式失败了,因为即使最后两个字符集后面有*
,最后两个字符集旁边的空格也是不是可选的。因此,(例如)字符串中只有2个单词,只有在这两个单词后接两个空格时才匹配。
我建议您从[A-Z][A-Za-z]+
开始第一个单词,然后重复一个空格,后跟一个单词,最多3次:
^[A-Z][A-Za-z]+(?: [A-Z][A-Za-z]+){1,3}$
https://regex101.com/r/IvSvAH/1
如果可能只有一个字符的单词(例如“ I”或“ A”),则将[A-Za-z]
字符集用*
而不是+
重复。