2016-11-23 12 views
0

括弧で囲まれた括弧で囲まれたテキストをすべて削除しようとしています。私は、これはのようなもののために働く正規表現Pythonの正規表現は部分文字列一致でのみ動作しますが、文字列全体では機能しません

re.sub(r'\(.*\) | \[.*\]', '', text)

を使用しています:

import re 
text = 'the (quick) brown fox jumps over the [lazy] dog' 
print re.sub(r'\(.*\) | \[.*\]', '', text) 

> the brown fox jumps over the dog 

text = '(the quick) brown fox jumps over the [lazy] dog' 
print re.sub(r'\(.*\) | \[.*\]', '', text) 

> brown fox jumps over the dog 

しかし、文字列全体が正規表現

text = '[the quick brown fox jumps over the lazy dog]' 
print re.sub(r'\(.*\) | \[.*\]', '', text) 

> [the quick brown fox jumps over the lazy dog] 

> # This should be '' (the empty string) # 

と一致した場合に、それが失敗した場合は私が間違っているんですか?

+1

私は欲張りのマッチングには注意します。テキスト内にランダムな ")"という単体シンボルだけがある場合、この正規表現は間にあるすべてを取り除きます。例えば、 ''これは(小さな)サンプルテキストで、a)のシンボルは ''これはシンボルです ''になります。嫌な試合を使うかもしれない? (私の答えの編集を参照してください) – gowrath

+0

@gowrathそれは重要なメモです。私の場合、私はデータをフォーマットしたので確信していますが、一般的なケースではそれは扱わなければならないものです – marcman

答えて

2

あなたは、正規表現の上に余分なスペースを持っているだけで前にスペースを削除する必要があると|

re.sub(r'\(.*\)|\[.*\]', '', text) 

またはそれらをあなたの既存の出力

re.sub(r'\(.*\)\s?|\s?\[.*\]', '', text) 
+0

ああ。もちろん。 Pythonが空白の使用を強調しているのは、 – marcman

1

に一致するように、オプションの試合を行った後あなたが持っています余計なスペースがあります:

試行:

re.sub(r'\(.*\)|\[.*\]', '', text) 

regexがこのような奇妙なことをするときにテストするのに適した場所は、hereです。何がうまくいかないかを見ていくうえで素晴らしいインタラクティブな方法です。例えば、あなたのケースでは、それは "(ペース)"にマッチしませんでしたが、後にスペースを置くとすぐに "(ペース)"にマッチしました。

注:

私はコメントで述べたように、あなただけのスタンドアロンのシンボルであり得ることをあなたの文章で「)」ランダムを持っている場合貪欲試合は予想外のことを行う可能性があることに注意してください。代わりに消極的マッチングを考えてみましょう:

re.sub(r'\(.*?\)|\[.*?\]', '', text) 

を回すことになる:

This is a (small) sample text with a) symbol" ===> "This is a sample text with a) symbol" 

があなたのに対し、現在与えるだろう:

This is a (small) sample text with a) symbol" ===> "This is a symbol" 
0
import re 
text = '''[the quick brown fox jumps over the lazy dog] 
the (quick) brown fox jumps over the [lazy] dog 
(the quick) brown fox jumps over the [lazy] dog''' 
print (re.sub(r'[(\[].+?[)\]]', '', text)) 

アウト:

the brown fox jumps over the dog 
brown fox jumps over the dog 
+0

これは不均衡な括弧にマッチして、次のように変わります: ''これはシンボルです ''に ''これはシンボルです ''。 – gowrath

+0

はい、あなたは正しい、ポイントのおかげで –

関連する問題