0

正規表現を使用しs = "a{asdfgh{asf}xvc}defg}des}" てその部分を抽出したい文字列があります。"{asdfgh{asf}xvc}"正規表現の一致を使用しました

p = re.compile('(\{[\w|\W]+?\})')

しかし、それは抽出し"{asdfgh{asf}"ます。部分を抽出するための正しい正規表現は何ですか"{asdfgh{asf}xvc}"

また:私が求めているのは、「}」文字の2回目の一致です。n 番目のオカレンスを一致させるにはどうすればよいですか。

4

4 に答える 4

1

これを試してみてください...

>>> import re
>>> s = 'a{asdfgh{asf}xvc}defg}des}'
>>> p = re.compile('(\{[\w|\W]+?\}.+?\})')
>>> print p.findall(s)
['{asdfgh{asf}xvc}']

もう 1 つ一致させる必要がある場合は.+?\}、re に追加するだけです。

>>> p = re.compile('(\{[\w|\W]+?\}.+?\}.+?\})')
>>> print p.findall(s)
['{asdfgh{asf}xvc}defg}']
>>> 
于 2013-01-27T14:34:15.180 に答える
0

}最初の の後の 2 番目の出現を検索するには、次の{ように RE を作成します。

{ <non-} text>} <non-} text>}

<non-} text>として表現すると[^}]*、次のようになります。

    {[^}]*}[^}]*}

{}{}と区別する必要がある場合{{}}、事態はさらに複雑になります。一般に、正規表現は入れ子を処理するための優れたツールではありません。それを可能にする深い数学的な結果があります。考えられる回避策は、すぐに複雑になりすぎるおかしなものです。しかし、ブラケット パターンがどのように見えるかを知っていて、2 番目の に到達したい場合は}、これで十分です。

于 2013-01-27T15:01:15.050 に答える
0

{から2 番目の出現までに一致させるために}使用できます

\{(?:[^}]*\}){2}

{からn番目の外観に一致させるには、}使用できます

\{(?:[^}]*\}){n}

は、一致を生成するために n 回連続して出現する必要があること(?:[^}]*\})を意味する非キャプチャ グループです。{n}

于 2013-01-27T17:19:58.433 に答える
0

この正規表現を使用できます

\{.*?\{[^{}]*\}.*?\}

N 番目のオカレンスの場合

(\{[^}{]*){N}[^{}]*([^{}]*\}){N} 

そう

N=1 の場合は一致します{xyz}

N=2 の場合は一致します{x{y}z}

于 2013-01-27T14:28:09.950 に答える