我希望使用单个函数来匹配可在另一个函数中使用的多个值。
我可以从下面开始使用单个正则表达式值,寻找与第二个正则表达式“ regex2”匹配的建议
工作---
def parse_desc(description):
regex = r"^Created on\((.*?)\) for (.*?) "
matches = re.finditer(regex, description, re.MULTILINE)
for matchNum, match in enumerate(matches):
return match.groups()
return '', ''
建议--试图找到“创建于”和“复制于”的匹配项
def pass_desc(description):
regex = r"^Created on\((.*?)\) for (.*?) "
regex2 = r"^(.*?)Copied on (.*?) "
matches = re.finditer(regex, description, re.MULTILINE) or re.finditer(regex2, description, re.MULTILINE)
for matchNum, match in enumerate(matches):
return match.groups()
return '', ''
我可以让两个正则表达式都可以作为单个函数工作
答案 0 :(得分:1)
要了解为什么这种方法行不通,请尝试在解释器1 or 2
中执行。 here对此行为进行了解释。
我将分别搜索这两种模式,然后在随后的两个for
循环中对其进行遍历。如果您只需要一个迭代器对象,则应该可以使用
from itertools import chain
y_iter = chain(l1, l2)
将两个迭代器对象链接在一起。
答案 1 :(得分:0)
用|
(或)组合两个正则表达式。现在,每个匹配项将返回4个组,其中两个将根据匹配的内容为None
。即使您有一个for
循环,您还是在检索第一个匹配项后发出了return
,但这是不正确的。更新的代码使用 list理解返回 all 匹配项:
重新导入
def pass_desc(description):
regex12 = r"^Created on\((.*?)\) for (.*?) |^(.*?)Copied on (.*?) "
return [match.groups() for match in re.finditer(regex12, description, re.MULTILINE)]
print(pass_desc('Created on(Tuesday) for Mary \nIt was Copied on Friday for Sally.'))
打印:
[('Tuesday', 'Mary', None, None), (None, None, 'It was ', 'Friday')]
答案 2 :(得分:0)
def pass_desc(description):
regex = r"^Created on\((.*?)\) for (.*?) "
regex2 = r"^(.*?)Copied on (.*?) "
matches = re.finditer(regex, description, re.MULTILINE)
matches2 = re.finditer(regex2, description, re.MULTILINE)
from itertools import chain
y_iter = chain(matches, matches2)
for matchNum, match in enumerate(y_iter):
return match.groups()
return '', ''