gpt4 book ai didi

python - 使用正则表达式 'or' 并同时捕获组

转载 作者:太空狗 更新时间:2023-10-30 02:38:45 33 4
gpt4 key购买 nike

我正在尝试匹配下面的“ephname”表达式(取决于存在哪个文件),但我只想捕获数字:

entries = ['other data\nephdelay = 12\nephname = cfghjk78.comb\nother data', 'other data\nephdelay = 17\nephname = qwerty.s92\nother data']

我正在使用它作为我的正则表达式,但没有显示任何匹配项(但是如果我选择一个并删除 bool 值,它只对一个有效):

\s?ephname\s?=\s?.*?\.s(\d+)\s?|\s?ephname\s?=\s?.*?(\d+)\.comb\s?

我已经在正则表达式网站上对此进行了测试,但我看不出问题所在。我希望输出为“94”或“78”,具体取决于条目。为什么我没有得到任何匹配项?

编辑:在我的代码中我有这个:

import re
commonterms = (["term1", "#term1pattern"],
["ephsol", "\s?ephname\s?=\s?.*?\.s(\d+)\s?|\s?ephname\s?=\s?.*?(\d+)\.comb\s?"],
["term3", "#term3pattern"], ...)

terms = [commonterms[i][0] for i in range(len(commonterms))]
patterns = [commonterms[i][1] for i in range(len(commonterms))]

d = {t: [] for t in terms}

def getTerms(entry):
for i in range(len(terms)):
term = re.search(patterns[i], entry)
term = term.groups()[0] if term else 'NULL'
return d

for entry in entries:
d = getTerms(entry)

print d['ephsol']

然后当我打印 d['ephsol'] 时,我得到了一堆 NULL,但我知道应该有匹配项。

最佳答案

您遇到的问题是您在两个不同的组之一中有一个匹配项:

entries = ['other data\nephdelay = 12\nephname = cfghjk78.comb\nother data', 'other data\nephdelay = 17\nephname = qwerty.s92\nother data']

for e in entries:
m=re.search(r'\s?ephname\s?=\s?.*?\.s(\d+)\s?|\s?ephname\s?=\s?.*?(\d+)\.comb\s?', e)
if m:
print "Group 1: {}, Group 2: {} {}".format(m.group(1), m.group(2), m.groups())

打印:

Group 1: None, Group 2: 78 (None, '78')
Group 1: 92, Group 2: None ('92', None)

要打印任何一个,您可以这样做:

for e in entries:
m=re.search(r'\s?ephname\s?=\s?.*?\.s(\d+)\s?|\s?ephname\s?=\s?.*?(\d+)\.comb\s?', e)
if m:
print m.group(1) if m.group(1) is not None else m.group(2)

打印:

78
92

另一种选择是 change your regex这样捕获总是在组 1 中:

for e in entries:
m=re.search(r'^ephname[ \t]*=[ \t]*[^0-9\n]*(\d+)(?:\.comb|\s)', e, flags=re.M)
if m:
print m.group(1)

打印:

78
92

关于python - 使用正则表达式 'or' 并同时捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46085882/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com