如何使用RegEx获取给定模式的名称?

时间:2018-12-27 09:50:10

标签: python regex

我正在尝试使用RegEx从文本中获取以下模式:

John Doe
JOHN DOE
Sam John Watson
Sam John Lilly Watson
SAM JOHN WATSON
SAM JOHN LILLY WATSON

输入数据仅包含一行,我需要在其中查找以上模式。

有关模式的更多信息

  • 每个单词都以大写字母开头,后跟大写或小写字母
  • 最少2个字
  • 最多4个单词
  • 单词将仅包含A-Z或a-z字符

我尝试过的事情:

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个单词时失败。

1 个答案:

答案 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]字符集用*而不是+重复。