用于有条件地捕获逗号分隔字符串的Python正则表达式
我有一个人名列表,可以有3种不同的风格:用于有条件地捕获逗号分隔字符串的Python正则表达式,python,regex,Python,Regex,我有一个人名列表,可以有3种不同的风格: {last name}、{first name}{middle name}(示例:鲍勃、迪伦·蒂娜) {last name},{first name}{middle initial}。(示例:Bob,Dylan T.) {last name},{first name}(示例:鲍勃、迪伦) 这是我写的正则表达式: ^[a-zA-Z]+(([' ,.-][a-zA-Z ])?[a-zA-Z]*)*$ 但它不起作用 您可以这样编写正则表达式 ^(\w+),\
{last name}、{first name}{middle name}
(示例:鲍勃、迪伦·蒂娜){last name},{first name}{middle initial}。
(示例:Bob,Dylan T.){last name},{first name}
(示例:鲍勃、迪伦)^[a-zA-Z]+(([' ,.-][a-zA-Z ])?[a-zA-Z]*)*$
但它不起作用 您可以这样编写正则表达式
^(\w+),\s(\w+)\s*(\w*\.?)$
这是你的电话号码
将regex更新为这样,您可以为您的三个案例获得三个不同的组
^(\w+,\s\w+\s\w+)$|^(\w+,\s\w+\s\w+\.)$|^(\w+,\s\w+)$
这是你的电话号码
下面是python代码
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.')]
是否可以分别为每种情况编写正则表达式?@user8714896是的,这是可能的。这将返回
[('Bob','Dyla','n')]
,用于re.findall(p,“Bob,Dylan”)
@ZeinabAbbasimazar你在谈论哪一个?@ZeinabAbbasimazar它在演示中工作正常。对不起,说到这里,我在上面打错了。这能回答你的问题吗?