gpt4 book ai didi

python 正则表达式错误 : unbalanced parenthesis

转载 作者:太空狗 更新时间:2023-10-30 00:45:39 27 4
gpt4 key购买 nike

我是 python 的新手,所以我有一个字典,里面有一些键,还有一个字符串。如果字符串中存在在字典中找到的模式,我必须替换该字符串。字典和字符串都非常大。我正在使用正则表达式来查找模式。

一切正常,直到弹出这样的键 '-(' 或这个 '(-)' 在这种情况下 python 给出了不平衡括号的错误。

这是我编写的代码的样子:

somedict={'-(':'value1','(-)':'value2'}
somedata='this is some data containing -( and (-)'
for key in somedict.iterkeys():
somedata=re.sub(key, 'newvalue', somedata)

这是我在控制台中遇到的错误

Traceback (most recent call last):
File "<console>", line 2, in <module>
File "C:\Python27\lib\re.py", line 151, in sub
return _compile(pattern, flags).sub(repl, string, count)
File "C:\Python27\lib\re.py", line 244, in _compile
raise error, v # invalid expression
error: unbalanced parenthesis

我还使用正则表达式编译器尝试了很多方法并进行了大量搜索,但没有找到任何解决问题的方法。感谢您的帮助。

最佳答案

您需要使用 re.escape() 对 key 进行转义 :

somedata = re.sub(re.escape(key), 'newvalue', somedata)

否则内容将被解释为正则表达式。

你在这里根本没有使用正则表达式,所以你也可以使用:

somedata = somedata.replace(key, 'newvalue')

如果您只想替换整个单词(因此在输入字符串的开头或结尾使用空格或标点符号围绕它们),您需要某种边界 anchor ,在该 anchor 处点使用正则表达式是有意义的。如果你只有字母数字单词(加上下划线),\b会工作:

somedata = re.sub(r'\b{}\b'.format(re.escape(key)), 'newvalue', somedata)

这将 \b在要替换的字符串之前和之后,bazfoo baz bar已更改,但 foo bazbaz bar 不是

对于涉及非字母数字“单词”的输入,您需要将 whitespace-or-start 和 whitespace-or-end anchor 与 look-aheads 和 look-behinds 相匹配:

somedata = re.sub(r'(?:^|(?<=\s)){}(?:$|(?=\s))'.format(re.escape(key)), 'newvalue', somedata)

这里是模式 (?:^|(?<=\s))使用两个 anchor ,字符串开头 anchor 和后视断言,来匹配字符串开头或紧邻左侧空格的位置。同样(?:$|(?=\s)对另一端做同样的事情,匹配字符串的结尾或后跟空格的位置。

关于 python 正则表达式错误 : unbalanced parenthesis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15947140/

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