用于有条件地捕获逗号分隔字符串的 Python 正则表达式



>我有一个人名列表,可以有3种不同的风格:

  1. {last name}, {first name} {middle name}(例如:鲍勃、迪伦·蒂娜(
  2. {last name}, {first name} {middle initial}.(例如:鲍勃、迪伦·
  3. {last name}, {first name}(例如:鲍勃、迪伦(

这是我写的正则表达式:

^[a-zA-Z]+(([' ,.-][a-zA-Z ])?[a-zA-Z]*)*$

但它不起作用。

你可以这样写正则表达式

^(w+),s(w+)s*(w*.?)$

这是演示。

将正则表达式更新为这样,您可以为三种情况获得三个不同的组

^(w+,sw+sw+)$|^(w+,sw+sw+.)$|^(w+,sw+)$

这是演示。

这是蟒蛇代码

import re
s2 = "Bob, Dylan"
out = re.findall(r"^(w+),s(w+)s*(w*.?)$",s2)
print(out)

输出

[('Bob', 'Dylan', '')]

你应该使用这个正则表达式:

(w+),s*(w+)s*(w{0,}.*)

这是您将获得的结果:

>>> import re
>>> s1 = "Bob, Dylan Tina"
>>> s2 = "Bob, Dylan"
>>> s3 = "Bob, Dylan T."
>>> p = re.compile(r"(w+),s*(w+)s*(w{0,}.*)")
>>> re.findall(p, s1)
[('Bob', 'Dylan', 'Tina')]
>>> re.findall(p, s2)
[('Bob', 'Dylan', '')]
>>> re.findall(p, s3)
[('Bob', 'Dylan', 'T.')]

最新更新