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

问题描述 投票:0回答:2

我有一个人名列表,可以有3种不同的样式:

  1. [{last name}, {first name} {middle name}(例如:Bob,Dylan Tina)]
  2. [{last name}, {first name} {middle initial}.(例如:Bob,Dylan T。)]
  3. {last name}, {first name}(例如:鲍勃,迪伦)

这是我写的正则表达式:

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

但是它不起作用。

python regex
2个回答
0
投票

您可以这样编写正则表达式

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

这里是demo


0
投票

您应使用此正则表达式:

(\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.')]
© www.soinside.com 2019 - 2024. All rights reserved.