3

次のテキストを持つ Unicode オブジェクトが与えられた場合:

a
b
c
d
e

aaaa
bbbb
cccc
dddd
eeee

行の 2 番目のグループ、つまり、空白行の後のすべての行を取得したいと思います。これは私が使用したコードです:

text = ... # the previous text
exp = u'a\nb\nc\nd\n\e\n{2}(.*\n){5}'
matches = re.findall(exp, text, re.U)

実際、これは最後の行のみを取得します。最後の 5 つを取得するにはどうすればよいでしょうか?

4

3 に答える 3

4

キャプチャ グループ自体を繰り返しています。これにより、各一致が次の繰り返しで上書きされます。

こうすれば

exp = ur'a\nb\nc\nd\n\e\n{2}((?:.*\n){5})'

5行をまとめます。

グループを手動で綴らない限り、個々の一致に到達することはできません。

exp = ur'a\nb\nc\nd\n\e\n{2}(.*\n)(.*\n)(.*\n)(.*\n)(.*\n)'
于 2013-07-16T13:33:19.417 に答える
2

それだけではない理由:

text[text.index('\n\n') + 2:].splitlines()
# ['aaaa', 'bbbb', 'cccc', 'dddd', 'eeee']
于 2013-07-16T13:37:02.347 に答える
0

検索したテキストの最初の部分の文字数に何らかの制限があり、それが望ましくない場合は、次のように X 文字を超える単語のみを検索するように設定しないでください:

^[a-z]{2,}

これにより、2文字を超えるすべての単語が取得されます。

次のように制御できます。

  • {3} ちょうど 3 回のオカレンス。
  • {6,} 少なくとも 6 回発生。
  • {2,5} 2 ~ 5 回の発生。
于 2013-07-16T13:40:33.697 に答える