0

特定のパターンの前の最後の区切り文字の位置を取得するための正規表現は何ですか?

たとえば、次のような文字列があります

some value;some other value;some special XYZ value;some more special XYZ value

ここで、区切り文字はセミコロン( ";")であり、私が探しているパターンは"XYZ"を含む任意の文字列です。

正解は、この場合は位置28です。これは、一致パターン( "XYZ")を含む要素の前にある区切り文字( ";")の最後の出現です。

正規表現はどのようになりますか?

4

3 に答える 3

1

この正規表現を使用する

^.*(;).*XYZ.*$

.*(;).*XYZ.*貪欲に一致します。つまり、最後に発生するまで一致;XYZます。

于 2012-11-03T08:02:56.870 に答える
1
;(?=[^;]*XYZ)

XYZ文字列の同じセグメント内で後に続くセミコロンに一致します。

最初の出現を見つけるために一度それを使用してください。繰り返し使用すると、以下のようなこともあります。

于 2012-11-03T08:13:01.423 に答える
0

あなたは2つのステップでそれを行うことができます:

  • 区切り文字が前に付いたXYZの最初の出現を含む最大の部分文字列を抽出します
  • その部分文字列で、最後の区切り文字の位置を見つけます

すなわち、

s = "some value;some other value;some special XYZ value;some more special XYZ value"
s1 = re.findall("^.*?;.*?XYZ",s)[0]
len(re.findall("(.*;)",s1)[0]) --> 28
于 2012-11-03T08:45:03.953 に答える