11

例:
私の文字列は:123456789 nn nn oo nn nn mlm nn203です。
私の目標は: nn.

次に、文字列を最後から最初に一致させ、最初の一致結果とその位置を返します。
この例では、結果はnn[-5] で始まり [-3] で終わります。
このプロセスを実行するための簡単な関数を作成しましたが、正規表現を使用してこの作業を行うにはどうすればよいでしょうか?

4

3 に答える 3

14

文字列自体については、findall を実行して最後のものを使用します。

import re

st='123456 nn1 nn2 nn3 nn4 mlm nn5 mlm'

print re.findall(r'(nn\d+)',st)[-1]

版画nn5

を使用して同じことを行うこともできますfinditer。これにより、関連するインデックスを簡単に見つけることができます。

print [(m.group(),m.start(),m.end()) for m in re.finditer(r'(nn\d+)',st)][-1]

版画('nn5', 27, 30)

多くの一致があり、最後の一致のみが必要な場合は、文字列とパターンを単純に逆にすることが理にかなっている場合があります。

m=re.search(r'(\d+nn)',st[::-1])
offset=m.start(1)
print st[-m.start(1)-len(m.group(1)):-m.start(1)]

版画nn5

于 2013-05-12T17:35:23.737 に答える
4

考え:

  • 逆の文字列で逆の正規表現(あなたの場合は無関係)を見つけます
  • 結果のインデックスは負の数に変換 + switch start<->end

例:

>>> import re
>>> s = "123456789 nn nn oo nn nn mlm nn203"
>>> m = re.search("(nn)", s[::-1])
>>> -m.end(), -m.start()
(-5, -3)
于 2013-05-12T18:12:42.357 に答える