[email protected]
のようなものにマッチした後、私は(\.\w+)
(これは単なる例です)の1つ以上をキャプチャしたい私は(。\ w +)+を追加しようとしましたが、最後のマッチだけをキャプチャします。例えば、[email protected]
試合だけは[email protected]
部分の後.tr
を含めるので、私は.something
と.edu
グループを失いました。これをPythonの正規表現で行うことはできますか、最初はすべてをマッチングし、後でサブパターンを分割することをお勧めしますか?Pythonの正規表現でサブパターンを繰り返しキャプチャする
答えて
あなただけの代わりにこれを行うことによって、最後のマッチをキャプチャ(\.\w+)+
の問題を解決することができます((?:\.\w+)+)
これは動作します:
>>> regexp = r"[\w\.][email protected](\w+)(\.\w+)?(\.\w+)?(\.\w+)?(\.\w+)?(\.\w+)?"
>>> email_address = "[email protected]"
>>> m = re.match(regexp, email_address)
>>> m.groups()
('galactica', '.caprica', '.fleet', '.mil', None, None)
しかし、それは6つのサブグループの最大値に制限されます。これを行うには良い方法は次のようになります。正規表現は、電子メールアドレス限り、罰金です
>>> m = re.match(r"[\w\.][email protected](.+)", email_address)
>>> m.groups()
('galactica.caprica.fleet.mil',)
>>> m.group(1).split('.')
['galactica', 'caprica', 'fleet', 'mil']
注意は単純です - しかし、これがために破損するあらゆる種類のものがあります。電子メールアドレス正規表現の詳細については、this questionを参照してください。私は後に繰り返しサブパターンを分割するといいと思うあなたのケースでは
>>> m = regex.match(r'([.\w]+)@((\w+)(\.\w+)+)', '[email protected]')
>>> m.groups()
('yasar', 'webmail.something.edu.tr', 'webmail', '.tr')
>>> m.captures(4)
['.something', '.edu', '.tr']
:
re
モジュールを繰り返しキャプチャを(regex
がそれをサポートしています)をサポートしていません。シンプルで読みやすいコード(例:@Li-aung Yip's answerのコードを参照)につながります。
好奇心から、繰り返しキャプチャを一致させると、どのように置換パターンを書いていますか? '\ 1'、' \ 2'、 '\ 3'などの意味は'(\。\ w +) 'にマッチした回数によって変わりますか? –
@ Li-aung Yip: '\ 1'は' m.group(1) 'に対応します。意味は変わらない。関数を置換パターンとして使用し、その中に 'm.captures()'を呼び出すことができます。 – jfs
あなたの例では、 '\ 1'、' \ 2'、 '\ 3'の意味は一度しか捕捉されないので明らかです。しかし '\(\。\ w +)+'に対応する '\ 4'の意味は何ですか? '\ 4'は" 4番目のキャプチャグループと一致する最後の部分文字列 "、この場合は' .tr 'のように見えます。 –
これは、あなたが探しているものです。略語については
>>> import re
>>> s="[email protected]"
>>> r=re.compile("\.\w+")
>>> m=r.findall(s)
>>> m
['.something', '.edu', '.tr']
- 1. マルチラインの正規表現 - 問題キャプチャ繰り返しグループ
- 2. サブパターンの正規表現
- 3. Python。正規表現。無効な正規表現:複数の繰り返し
- 4. 正規表現の繰り返しパターン
- 5. 正規表現の繰り返しグループ
- 6. 正規表現 - 繰り返しグループ
- 7. サブパターンの一致の正規表現
- 8. 正規表現で繰り返しグループを取得する
- 9. 大規模なマッチ内のグループを繰り返しキャプチャする正規表現ですか?
- 10. ヘルプサブパターンを繰り返して正規表現を短くする
- 11. Pythonでrepalceする文字列の単語を繰り返す正規表現
- 12. 正規表現の一部を繰り返します
- 13. 特定の文字までのPython正規表現の繰り返し
- 14. Python正規表現による繰り返しの組み合わせのチェック
- 15. 正規表現パターンのグループパターンの繰り返し
- 16. C#の正規表現の繰り返しグループと分割コンマ
- 17. 正規表現の文字列繰り返しの長さ
- 18. Mysql繰り返し式のない正規表現の検索
- 19. 正規表現オプションの繰り返しのグループ
- 20. Pythonの正規表現:文字列の1回以上の繰り返し
- 21. 正規表現の書式付きテキストをキャプチャして折り返す正規表現
- 22. 正規表現 - 不連続な繰り返しの範囲
- 23. 正規表現は、文字の繰り返しに分割
- 24. Java正規表現:キャプチャグループの繰り返し
- 25. 正規表現のキャプチャグループを繰り返す
- 26. 正規表現のセクションを繰り返す?
- 27. javascript正規表現グループで繰り返す
- 28. 正規表現を使用して繰り返し文字のセットをキャプチャする方法は?
- 29. 正規表現グループのキャプチャ
- 30. Python正規表現エラー:0の位置に何も繰り返しません。
(あなたは小文字に変換した場合): 're.sub(UR '((:?。[AZ] \){2、 }) '、ラムダ:m.group(1).replace('。 '、' ')、テキスト) ' – bahmait
ありがとう。私は括弧を付け加えて繰り返しサブパターンにマッチさせることができましたが、そのパターンの最後のものと一致するグループがありました。私は '(?:...)'が非捕捉グループを作るのを見ていませんでした。 https://docs.python.org/2/library/re.html#regular-expression-syntaxこれを追加すると、その問題が修正されます。 –