Pythonのreモジュールを使用して特定のパターンを一致させようとしています。全文に一致させたい(より正確には、スペースや句読点で区切られた英数字の文字列シーケンスであると言えます)
例えば。
- 「これは普通の文章です。」
- 「これも有効です」
- 「これもそうだ」
正規表現のさまざまな組み合わせを試してみましたが、パターンの動作を正しく把握できず、表現ごとに異なるが説明できない結果が得られました(私は初心者ですが、それでも)。
私は試しました:
"((\ w +)(\ s?))*"
私の知る限り、これは1つ以上の英数字に貪欲に一致し、その後に空白文字が1つまたはまったくない場合に一致し、その後、このパターン全体に貪欲に一致する必要があります。これは見た目とは違うので、明らかに私は間違っていますが、その理由を知りたいと思います。(これにより、結果として文全体が返されると期待していました)上記の最初のサンプル文字列で得られる結果は、[('sentence'、'sentence'、'')、(''、''、'')、 (''、''、'')、(''、''、'')]。
"(\ w +?)*"
これがどのように機能するのかさえわかりません。公式ドキュメント(python help('re'))には、、+ 、? 前のREのxまたはx(貪欲な)繰り返しに一致します。このような場合は、前のREを「?」のスペースにするだけです。または'\w +'は先行するREですか?そして、' '演算子のREは何になりますか?これで得られる出力は['sentence']です。
"(\ w + \ s?)+)"などの他の; "((\ w *)(\ s ??))など。これは基本的に、文がアルファ数値のセットであり、その後に単一/有限数の空白が続き、このパターンが繰り返されるという同じ考えのバリエーションです。以上。
誰かが私がどこで間違っているのか、そしてなぜ、そしてなぜ上記の表現が私が期待していたように機能しないのか教えてもらえますか?
PS最終的には「[\w]+」が機能するようになりましたが、これでは継続する空白文字の数を制限できません。