4

在 python 3.2.2 中,当我尝试在正则表达式模式中使用 * 时遇到了奇怪的错误。当* stads 之后/ 一切正常。但是当我尝试从模式中删除 / 时,此代码会出现错误:sre_constants.error: bad character range

import re
foo = re.search("[^123+-/*]", "123+-/*w")
if foo:
    print("foo")
else:
    print("doo")

在 python 文档中,我发现使用 * 是可以接受的,没有任何反斜杠或其他东西。然而,这样的代码问题仍然存在。

4

2 回答 2

5

您的问题不是*,而是连字符减号,它表示字符类中的范围,在这种情况下,所有字符都介于+( /)+,-./之间。出现无效范围是因为*出现在 之前 /

如果要在字符类中包含文字连字符,则必须对其进行转义或将其放在末尾或开头:

[^123+/*-]
于 2012-06-02T22:14:53.720 回答
2

减号导致最后一个字符被解释为字符范围。[+-/]acutally 表示“任何一个+,-./”(参见 ASCII 表)。当您替换/by*时,您正在创建无效范围[+-*],因为星号 42 的 ASCII 代码小于加号 43 的 ASCII 代码。

解决方案只是逃避减号(然后它不再是一个范围)。

于 2012-06-02T22:15:31.893 回答