与其他表达式进行“或”运算时,Python正则表达式与组不匹配

JMQ

我一直在尝试用正则表达式调试一个奇怪的问题。在这里,我将其简化为一个简单的案例。我正在检查四个正则表达式中的任何一个字符串。我的字符串与正则表达式匹配,但是我要提取的括号中的分组值不适用于我编写的代码。我不知道的是,如果我只搜索一个表达式,那么我要匹配的整个字符串和要提取的值都将正确计算。但是,当我使用所有四个表达式进行搜索时,字符串仍然与[group(0)]匹配,但是我没有得到需要的字段[group(1)]。

#!/usr/bin/python3

import re

data = '<w:t xml:space="preserve">More </w:t>'

text = re.search("<w:p>|<w:p .*?>|<w:t>(.*?)</w:t>|<w:t .*?>(.*?)</w:t>", data)
print("First RE")
print("group(0) " + text.group(0))
try:
    print("group(1) " + text.group(1))
except:
    pass

print("Second RE")
text = re.search("<w:t .*?>(.*?)</w:t>", data)
print("group(0) " + text.group(0))
try:
    print("group(1) " + text.group(1))
except:
    pass

当我运行它时,我得到以下结果:

First RE
group(0) <w:t xml:space="preserve">More </w:t>
Second RE
group(0) <w:t xml:space="preserve">More </w:t>
group(1) More 

我希望两个正则表达式都返回相同的结果。有人可以解释为什么不这样做吗?根据文档,OR为“ |” 具有较低的优先级,所以我不是为什么/如果其他正则表达式正在影响它。谢谢!

克里斯·道尔

您的第一个正则表达式中有两个捕获组,而第二个正则表达式中只有一个。在您的第一个正则表达式中,您使用或的原因是当它与第一个捕获组匹配表达式时,它不匹配,因此该捕获组为空,第二个捕获组匹配,因此该值存储在第二个捕获组中。

因此,在第一个正则表达式运行之后,第一个捕获组为空,第二个捕获组已填充。

import re

data = '<w:t xml:space="preserve">More </w:t>'
text = re.search("<w:p>|<w:p .*?>|<w:t>(.*?)</w:t>|<w:t .*?>(.*?)</w:t>", data)
print("First RE")
print(text.groups())
print("Second RE")
text = re.search("<w:t .*?>(.*?)</w:t>", data)
print(text.groups())

输出值

First RE
(None, 'More ')
Second RE
('More ',)

因此,您的问题是只查看第一个捕获组,但是在第一个正则表达式中,捕获组为空。因此,当您在try块中时,您尝试"group(1)与第一个捕获组中的值连接但是,您只能连接两个字符串,并且第一个捕获组中的值类型是,None因此将触发异常TypeError: can only concatenate str (not "NoneType") to str,然后您将其捕获并忽略。

那就是为什么你看不到印刷品。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

正则表达式仅在与其他模式不匹配时才匹配特定模式

来自分类Dev

Python正则表达式不匹配多个组

来自分类Dev

Google表格正则表达式与其他正则表达式应用程序不匹配

来自分类Dev

正则表达式匹配任何其他正则表达式不匹配的内容

来自分类Dev

正则表达式模式力与条件匹配,而不与其他条件匹配

来自分类Dev

表达式不匹配正则表达式

来自分类Dev

正则表达式,如何匹配某些字符但必须与其他字符存在?

来自分类Dev

当正则表达式工具表明它应该匹配时,python正则表达式不匹配

来自分类Dev

当正则表达式工具表明它应该匹配时,python正则表达式不匹配

来自分类Dev

组1不匹配每个正则表达式

来自分类Dev

如何告诉正则表达式不匹配组?

来自分类Dev

正则表达式匹配组

来自分类Dev

正则表达式匹配其他组(如果不存在正确的组)

来自分类Dev

正则表达式的正则表达式在Python中不匹配

来自分类Dev

正则表达式或不匹配

来自分类Dev

正则表达式不匹配

来自分类Dev

正则表达式不匹配

来自分类Dev

正则表达式不匹配

来自分类Dev

正则表达式不匹配

来自分类Dev

正则表达式不匹配

来自分类Dev

正则表达式不匹配

来自分类Dev

仅在匹配时获取正则表达式组

来自分类Dev

Python正则表达式搜索,匹配不匹配

来自分类Dev

正则表达式匹配某些字符而不匹配其他字符

来自分类Dev

正则表达式匹配两个单词,不匹配其他单词

来自分类Dev

Python正则表达式匹配OR运算符

来自分类Dev

正则表达式后跟字符时不匹配

来自分类Dev

不尾随斜杠时的正则表达式匹配

来自分类Dev

Python正则表达式:提取多个匹配组

Related 相关文章

热门标签

归档