1. ホーム
  2. python

[解決済み] regex エラー - 繰り返すことはありません。

2023-07-06 22:32:11

質問

この式を使用すると、エラーメッセージが表示されます。

re.sub(r"([^\s\w])(\s*\1)+","\\1","...")

で正規表現を確認したところ RegExr で正規表現を確認すると . を期待通りに返します。 しかし、Pythonで試すと、このようなエラーメッセージが表示されます。

raise error, v # invalid expression
sre_constants.error: nothing to repeat

誰か説明してください。

どのように解決するのですか?

Pythonのバグと思われます(vimでは完璧に動作します)。 問題のソースは (\s*...)+ ビットです。基本的に、あなたは (\s*)+ というのは、NULLになりうるものを繰り返そうとしているからです。

>>> re.compile(r"(\s*)+")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/re.py", line 180, in compile
    return _compile(pattern, flags)
  File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/re.py", line 233, in _compile
    raise error, v # invalid expression
sre_constants.error: nothing to repeat

ただし (\s*\1) はnullであってはならないのですが、私たちがそれを知っているのは、"not what's in \1 "を知っているからです。どうやらpythonはそうではないらしい......それは奇妙だ。