1

Python 3.4 では、2 種類の最も内側の中括弧、つまり他の中括弧を含まない中括弧を一致させるために 2 つの異なる正規表現を使用しようとしています。

正規表現 1)他の中かっこまたはかっこ内にない最も内側の中かっこに一致します。つまり、次の式

re.findall(r'...something...',"aaa{bbb{ccc}ddd}eee{fff}ggg(hhh{iii})jjj{kkk}") 

これを返します

['{fff}','{kkk}']

現時点では、次の式で試しています

re.findall(r'[^{(]*\{[^{}]+\}[^})]*',"aaa{bbb{ccc}ddd}eee{fff}ggg(hhh{iii})jjj{kkk}")

残念ながらこれを返します:

['bbb{ccc}ddd', '}eee{fff}ggg(hhh{iii', '})jjj{kkk}']

正規表現 2)他の中かっこまたはかっこ内にある最も内側の中かっこに一致します。つまり、次の式

re.findall(r'...something...',"aaa{bbb{ccc}ddd}eee{fff}ggg(hhh{iii})jjj{kkk}") 

これを返します

['{ccc}','{iii}'] 

私はこの式で試しています:

 re.findall(r'[{(]*\{[^{}]+\}[})]*',"aaa{bbb{ccc}ddd}eee{fff}ggg(hhh{iii})jjj{kkk}")

しかし、それはこれを返します:

['{ccc}', '{fff}', '{iii})', '{kkk}']

これらの正規表現を修正して正しい一致を得る方法について何か考えはありますか?

4

2 に答える 2

0

最初のケースでは、使用できます

{[^{}]*}(?![^{}()]*(?:[({][^{}()]*[)}])*[^(){}]*[})])

デモを参照してください。

https://regex101.com/r/aT3kG2/3

2番目のケースでは、使用できます

{[^{}]*}(?=[^{}()]*(?:[({][^{}()]*[)}])*[^(){}]*[})])

デモを参照してください。

https://regex101.com/r/aT3kG2/4

于 2016-02-11T17:23:49.793 に答える
0

「他の中括弧を含まない中括弧」に一致する単一の正規表現が必要な場合は、正確にそれを検索します-他の中括弧を含まない中括弧。

例えば:

re.findall(r'{[^{}]+}',"aaa{bbb{ccc}ddd}eee{fff}ggg(hhh{iii})jjj{kkk}") 

これは、両方のケースの組み合わせを返します。

['{ccc}', '{fff}', '{iii}', '{kkk}']

空の括弧 (例: ) も検索する場合は、 を{}に変更+します。*

于 2016-02-11T17:26:29.330 に答える