Python中的正则表达式匹配涉及多个模式

时间:2018-06-05 12:09:33

标签: python regex

我有一些棘手的正则表达式匹配我在Python中使用 re 包。

案例1:

包含名称&的条目列表年龄喜欢

John (45)
Mike (37)

我想要搜索的模式是Name(某个数字),并使用匹配的名称集复制所有这些行。如果我使用像......

这样的语法
found = re.search(r"(Name1|Name2|Name3) (\d+)", line)
if found: valid_line.append(line)

有一些问题。这需要哪些更正?

2 个答案:

答案 0 :(得分:0)

使用re.search

<强>实施例

import re
s = """John (45)
Mike (37)"""

for line in s.split("\n"):
    if re.search("\w+\s+\(\d+\)", line):
        print(line )

或者:

for line in s.split("\n"):
    if re.search("(John|Mike)\s+\(\d+\)", line):
        print(line )

<强>输出:

John (45)
Mike (37)
  • 您需要转义括号\(\)

答案 1 :(得分:0)

我认为获得名字和年龄对你来说是一个奖励。我不是很擅长正则表达式,所以我确信这是一种更简洁的方法。

  

([a-zA-Z]+)\s+\(([^)]\d)\)

实施例

import re

line = "John (45) Mike (37) John (45) Mike (37)"
exp = r"([a-zA-Z]+)\s+\(([^)]\d)\)"

for (name, age) in re.findall( exp, line ):
    print(name, "is", age, "years old.")

输出

John is 45 years old.
Mike is 37 years old.
John is 45 years old.
Mike is 37 years old.