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.*")

裸のアスタリスクは、正規表現ではグロブ式と同じ意味ではないことに注意してください。

于 2012-09-12T14:19:01.167 に答える
3

*はメタ文字であり、「先行するトークンの 0 個以上」を意味し、最初の*.

おそらく、単語の境界を探しているでしょう:

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

\b単語全体のみが一致することを保証します(したがって、この正規表現は失敗します、えーと"kittenshit"

于 2012-09-12T14:19:34.773 に答える