gpt4 book ai didi

Python 正则表达式错误 : bad character in group name

转载 作者:行者123 更新时间:2023-12-04 17:52:58 24 4
gpt4 key购买 nike

谁能告诉我为什么这个正则表达式在 oneline 正则表达式网站上工作正常,但在 python 中使用 re.compile() 时却不行。

我用过这个网站: https://regex101.com/测试字符串是:

"test": "value"

Python代码

x = r'((?(?=")(?:"(?(?<=\\)(?:.)|(?:[^")]))+")|(?:\w+)))(:|~)\s+((?(?=")(?:"(?(?<=\\)(?:.)|(?:[^"]))+")|(?:\w+)))'
re.compile(x)

错误:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\re.py", line 190, in compile
return _compile(pattern, flags)
File "C:\Python27\lib\re.py", line 245, in _compile
raise error, v # invalid expression
sre_constants.error: bad character in group name

最佳答案

从您的示例字符串和 regex101 输出来看,您似乎正在尝试将 Python 字符串与一般形式匹配:

"word": "word"

也就是说,第1组和第3组是可以用双引号引起来的单词,也可以不加引号,但没有挂引号,第2组是冒号或波浪号,后面可以通过空白字符。所以:

goodString = "\"test\": value"
badString = "test\": value"

您的正则表达式编译字符串的问题实际上暗示了解决方案! This question阐明了返回的错误和 Python documentation提供有关命名组的信息。

通过使用命名组,您可以使表达式更短、更符合 Pythonic!

x = r'((?P<a>\"?)\w+(?P=a))(:|~)\s+((?P<b>\"?)\w+(?P=b))'

为清楚起见:

group 1 = ((?P<a>\"?)\w+(?P=a))
group 2 = (:|~)\s+
group 3 = ((?P<b>\"?)\w+(?P=b))

第 1 组和第 3 组捕获子组(分别为 a 和 b)中是否存在引号,然后在单词末尾检查该子组。

您也不需要为组命名!您可以简单地引用他们的号码:

x = r'((\"?)\w+(\2))(:|~)\s+((\"?)\w+(\6))'

作为最终测试:

x = r'((\"?)\w+(\2))(:|~)\s+((\"?)\w+(\6))'
goodString = "\"test\": value"
badString = "test\": value"
print(re.match(x,goodString))
print(re.match(x,badString))

输出:

<_sre.SRE_Match object; span=(0, 13), match='"test": value'>
None

关于Python 正则表达式错误 : bad character in group name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43016302/

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