代码之家  ›  专栏  ›  技术社区  ›  Sociopath

如何提取特定模式后出现的字符串?[关闭]

  •  -1
  • Sociopath  · 技术社区  · 6 年前

    str1 = "Information name: Wen Moyes address: Mcity."
    str2 = "resume Name : Sam Win Father's name: Dean address"
    str3 = "Father's name: Dan. Acknowledge"
    str4 = "Father's Name: Joe Cena Name :- John Cena"
    

    我想从名字后面的每个字符串中提取名字。如果字符串包含 Father's name 它应该忽略这一部分,只寻找 name

    我的预期产出是

    Wen Moyes
    Sam Win
    None
    John Cena
    

    我试过的 :

    regex

    re.findall(r'name\s*:(\s*\w*\s\w*)', str1.lower())
    

    输出如下:

    [' wen moyes']
    [' sam win', ' dean address']
    [' dan']
    [' joe cena']
    

    我该怎么办?
    有没有不使用regex的替代方法?

    1 回复  |  直到 6 年前
        1
  •  1
  •   CertainPerformance    6 年前

    一种选择是消极地寻找 Father's ,然后匹配 Name: (\w+ \w+) :

    str1 = "Information name: Wen Moyes address: Mcity."
    str2 = "resume Name : Sam Win Father's name: Dean address"
    str3 = "Father's name: Dan. Acknowledge"
    str4 = "Father's Name: Joe Cena Name :- John Cena"
    
    pattern = re.compile(r"(?<!Father's )[Nn]ame ?:-? (\w+ \w+)")
    for str in [str1, str2, str3, str4]:
        print(re.findall(pattern, str))
    

    https://regex101.com/r/Gp5PDr/1