为什么我的正则表达式不返回?

2024-06-01 09:24:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我的正则表达式只有在不包含“或”选项时才匹配;但是我需要包含它,因为我需要匹配不同的字符串。在

entries[0] = 'ephname = /share/old/eph/2004A.1770.comb'
print re.search(r'\s?ephname\s?=\s?.*?\.s(\d+).*?\s?|\s?ephname\s?=\s?.*?(\d+)
\.comb\s?', entries[0]).group(1)
>>> None

但如果我能做到:

^{pr2}$

我不明白为什么第一次尝试没有匹配任何东西。有人知道为什么吗?在


Tags: 字符串renonesharesearch选项groupold
2条回答

在第一个regex中,组1位于|之前,因此它位于包含\.s的分支中。字符串的任何部分都不能与之匹配(没有文本.后跟文本s),因此整个分支都失败了。另一个分支成功了,但是它有一个不同的组号,可以让您知道哪个替代方案有效。在

匹配的;它返回了一个match对象,而不是None;您可以对该匹配对象调用.group(1)。在

然而,这里的问题是现在有2捕获组。第一个在第一个分支,第二个分支在第二个分支中。在

可以将匹配项存储到变量中,然后使用^{} property获取最后匹配的捕获组的索引:

m = re.search(r'\s?ephname\s?=\s?.*?\.s(\d+).*?\s?'
              r'|\s?ephname\s?=\s?.*?(\d+)\.comb\s?', entries[0])
if m:
    print(m.group(m.lastindex))

相关问题 更多 >