'(\s*)+'
エラーが発生する理由がわかりません'nothing to repeat'
。同時に'(\s?)+'
うまくいきます。
この問題はかなり前から知られていることを発見しました (たとえば、正規表現エラー - 繰り返すものはありません) が、Python 3.3.1 でもまだ見られます。
したがって、この動作に合理的な説明があるかどうか疑問に思っています。
実際には、次のように、繰り返される単語または数字の行を一致させたいと考えています。
'foo foo foo foo'
私はこれを思いついた:
'(\w+)\s+(\1\s*)+'
2 番目のグループが原因で失敗しました。(\1\s*)+
ほとんどの場合、単語間にスペースが 1 つしかないため、うまくいき(\1\s?)+
ます。実際には、このオプションも機能するはずです(\1\s{0,1000})+
更新: Python でのみ問題が発生したことを追加する必要があると思います。perlでは動作します:
`('foo foo foo foo' =~ /(\w+)\s+(\1\s*)+/) `
同等かどうかはわかりませんが、vim も機能します。
`\(\<\w\+\>\)\_s\+\(\1\_s*\)\+`
Update2: いつか現在の re を置き換えると言われている Python の正規表現の別の実装を見つけました。確認したところ、上記問題のあるケースではエラーは発生しません。このモジュールは個別にインストールする必要があります。ここまたはpypi経由でダウンロードできます