>我有一个人名列表,可以有3种不同的风格:
{last name}, {first name} {middle name}
(例如:鲍勃、迪伦·蒂娜({last name}, {first name} {middle initial}.
(例如:鲍勃、迪伦·{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.')]