2017-02-19 6 views
4

この正規表現を使用して、文字列から角括弧(およびその中のすべて)のインスタンスをすべて削除しようとしています。私の文字列は、正方形の複数のセットが含まれている場合は、角括弧とその内容をすべて削除するPythonの正規表現

>>>Issachar is a rawboned donkey lying down among the sheep pens. 

しかし:

import re 
pattern = r'\[[^()]*\]' 
s = """Issachar is a rawboned[a] donkey lying down among the sheep pens.""" 
t = re.sub(pattern, '', s) 
print t 

私は何を得ることは正しいです:文字列内の角括弧の唯一のペアがある場合たとえば、これは動作します角かっこ、それは動作しません。たとえば:

s = """Issachar is a rawboned[a] donkey lying down among the sheep pens.[b]""" 

私が取得:

>>>Issachar is a rawboned 

私は角括弧が文字列であるどのように多くの関係なく動作するように正規表現を必要としています。正解は次のとおりです。

>>>Issachar is a rawboned donkey lying down among the sheep pens. 

私は調査して無駄に多くの順列を試しました。

+0

正規表現は大カッコを[b] c [d] eのように連想させるのに役立ちますが、一般的に[* nested parens problem *](http ://stackoverflow.com/questions/133601/can-regular-expressions-be-used-to-match-nested-patterns#133684)。 (like:a [b [c] [d [e]]])あなたは特定の最大数のネスティングを特別にコーディングすることによって "偽造"することができます。 –

答えて

3

は貪欲一致し、その質問に与えられたパターンは、最後の]件まで一致します。

>>> re.findall(r'\[[^()]*\]', "Issachar is a rawboned[a] donkey lying down among the sheep pens.[b]") 
['[a] donkey lying down among the sheep pens.[b]'] 

反復演算子(*)後?を追加することで、あなたはそれが非貪欲の道を一致させることができます。

3

試してみてください。

import re 
pattern = r'\[[^\]]*\]' 
s = """Issachar is a rawboned[a] donkey lying down among the sheep pens.[b]""" 
t = re.sub(pattern, '', s) 
print t 

出力:デフォルト*(または+)によって

Issachar is a rawboned donkey lying down among the sheep pens. 
関連する問題