gpt4 book ai didi

Python多次重复错误

转载 作者:IT老高 更新时间:2023-10-28 20:21:05 25 4
gpt4 key购买 nike

我正在尝试确定某个词是否出现在字符串中。
术语前后必须出现空格,也可以有标准后缀。
示例:

term: google
string: "I love google!!! "
result: found

term: dog
string: "I love dogs "
result: found

我正在尝试以下代码:

regexPart1 = "\s"
regexPart2 = "(?:s|'s|!+|,|.|;|:|\(|\)|\"|\?+)?\s"
p = re.compile(regexPart1 + term + regexPart2 , re.IGNORECASE)

并得到错误:

raise error("multiple repeat")
sre_constants.error: multiple repeat

更新
失败的真实代码:

term = 'lg incite" OR author:"http++www.dealitem.com" OR "for sale'
regexPart1 = r"\s"
regexPart2 = r"(?:s|'s|!+|,|.|;|:|\(|\)|\"|\?+)?\s"
p = re.compile(regexPart1 + term + regexPart2 , re.IGNORECASE)

另一方面,下面的term顺利通过(+而不是++)

term = 'lg incite" OR author:"http+www.dealitem.com" OR "for sale'

最佳答案

问题在于,在非原始字符串中,\""

你很幸运所有其他未转义的反斜杠 - \s\\s 相同,而不是 s\(\\( 相同,而不是 ( 等等。但是你永远不应该依赖运气,或者假设你知道 Python 转义序列的整个列表。

要么打印出您的字符串并转义丢失的反斜杠(不好),转义所有您的反斜杠(好的),或者首先使用原始字符串(最好)。


话虽如此,您发布的正则表达式不会匹配某些应该匹配的表达式,但它永远不会引发 "multiple repeat" 错误。显然,您的实际代码与您向我们展示的代码不同,无法调试我们看不到的代码。


既然您已经展示了一个真正可重现的测试用例,那就是一个单独的问题。

您正在搜索可能包含特殊正则表达式字符的术语,如下所示:

term = 'lg incite" OR author:"http++www.dealitem.com" OR "for sale'

正则表达式中间的p++表示“1个或多个字母p的1个或多个”(在其他情况下,与“1个或多个字母p”相同)在某些正则表达式语言中,在其他语言中“总是失败”,在其他语言中“引发异常”。 Python 的 re 属于最后一组。事实上,你可以单独测试:

>>> re.compile('p++')
error: multiple repeat

如果要将随机字符串放入正则表达式,则需要调用 re.escape在他们身上。


还有一个问题(感谢 Ωmega):

正则表达式中的

. 表示“任何字符”。所以,,|.|;|:" (我刚刚从你的较长的交替链中提取了一个短片段)的意思是“逗号,或任何字符,或分号,或冒号”......这与“任何字符”相同。您可能想转义 ..


将所有三个修复放在一起:

term = 'lg incite" OR author:"http++www.dealitem.com" OR "for sale'
regexPart1 = r"\s"
regexPart2 = r"(?:s|'s|!+|,|\.|;|:|\(|\)|\"|\?+)?\s"
p = re.compile(regexPart1 + re.escape(term) + regexPart2 , re.IGNORECASE)

正如 Ωmega 在评论中指出的那样,如果它们都是一个字符长,则不需要使用一连串的交替;一个字符类也可以,更简洁,更易读。

而且我确信还有其他方法可以改进。

关于Python多次重复错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19942314/

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