Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于有条件地捕获逗号分隔字符串的Python正则表达式_Python_Regex - Fatal编程技术网

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

用于有条件地捕获逗号分隔字符串的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+),\

我有一个人名列表,可以有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+),\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它在演示中工作正常。对不起,说到这里,我在上面打错了。这能回答你的问题吗?