2016-11-27 7 views
0
re.findall(r'((([0-9]|[a-z]|[A-Z]){5,8},)*([0-9]|[a-z]|[A-Z]){5,8} reporting and syncing)', 'johnny, joda89 reporting and syncing heyff, jkojo, jkjkjdf, 2378a reporting and syncing and a lot of other jazz. I looked into whether 34987, 22187, and 36547 will report, but no one has gotten back with me about that. Also 34298 reporting and syncing.') 

が私にこの例ではre.findall()によって返されたタプルの最初の文字列は、常に最も長い一致文字列になりますか?

[('johnny, joda89 reporting and syncing', 'johnny, ', 'y', '9'), ('heyff, jkojo, jkjkjdf, 2378a reporting and syncing', 'jkjkjdf, ', 'f', 'a'), ('34298 reporting and syncing', '', '', '8')] 

を与え、各タプルの最初の文字列は最長です。それはいつも事実だろうか?誰かが各タプルの他の文字列がどこから来ているのか知っていれば、私もそれを知りたいです!ありがとう!

答えて

1

いつもそうですか?

いいえ、決してそうではありません。一致はの左から右へから返されます。

re.findall

文字列が左から右へスキャンされ、一致が 順序で返され、私は、各タプルマッチとのそれらのタプルの順序であることがわかり

+0

を発見しましたこのリストは、文字列内の左から右への一致の順序に従って続きます。私はなぜ各タプルの2番目、3番目、4番目の文字列があるのか​​理解できませんし、上記の例のように最長一致が常に各タプルの最初の文字列になるかどうかを調べようとしています。 – clearcom0

+0

誰も、上記の例で、各タプルの2番目、3番目、4番目の文字列が返される理由、または返されないように正規表現を変更する方法を知っていますか? – clearcom0

+1

'findall'は、キャプチャがない場合は完全一致を、キャプチャされたグループのタプルを返します。キャプチャはプレーンカッコ( '...)'の任意のペアであり、順番に遭遇します。たとえば、最後のキャプチャは '([0-9] | [a-z] | [A-Z])'です。最後のタプルメンバーはすべて1つの一致した文字です。これを避けるには、非キャプチャグループに変換することができます: '(?:...)'(カッコ内の最初に '?:'を挿入するだけです)。 – Amadan

関連する問題