10

我遇到了一个看似简单的 Python 正则表达式的问题。

# e.g. If I wanted to find "mark has wonderful kittens, but they're mischievous.."
p = re.compile("*kittens*")

这将失败并出现错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.7/re.py", line 190, in compile
    return _compile(pattern, flags)
  File "/usr/lib64/python2.7/re.py", line 242, in _compile
    raise error, v # invalid expression
sre_constants.error: nothing to repeat

我可能遗漏了一些非常简单的东西,正则表达式当然不是我的强项!

4

4 回答 4

25

您将正则表达式与glob混淆了。

你的意思是:

p = re.compile(".*kittens.*")

请注意,裸星号在 RE 中的含义与在 glob 表达式中的含义不同。

于 2012-09-12T14:19:01.167 回答
3

*是一个元字符,意思是“0个或多个前面的标记”,第一个没有什么可重复的*

也许您正在寻找单词边界:

p = re.compile(r"\bkittens\b")

\b确保只有整个单词匹配(所以这个正则表达式会失败,咳咳,"kittenshit"

于 2012-09-12T14:19:34.773 回答
0

问:什么是 re.py、sre.py、sre_constants.py?

答。https://blog.labix.org/2003/06/16/understanding-pythons-sre-structure

代码:

our_regex = '.*pattern.*('
try:
 re.compile(our_regex)
except Exception, e:
 print e, type(e)

unbalanced parenthesis <class 'sre_constants.error'>
于 2017-09-06T11:40:37.337 回答
0

它似乎是由 re 模块引发的错误。

要处理它,请导入 sre_constants 模块

这是一个小例子——使用 Pandas 数据框(这是我在看这个时遇到的问题)。

import re
import sre_constants

try:
    df=d[d.Ex_Feed.str.contains('*123', regex=True)]
except sre_constants.error as err:
    print("SRE Error")
except Exception as error:
    print("Some other err Err")
    print("{}".format(type(err)))
    junk=1
finally:
    print("It's time for bed said Zeberdee")

希望有帮助

于 2018-09-14T05:36:04.130 回答