2016-08-25 19 views
0

に2間の括弧内のすべての文字をカットする必要があります。は私のpython 2.7で文字列を持っている文字列

は、私が試してみたが、それを見つけることができない、あなたの助けのおかげで、私が試してみた:

re.search(r'.*?\((.*)\).*', a) 

しかし、それは動作しませんでした。文字列に2番目の文字があることを覚えていますが、最初のものだけが必要です。

感謝!

+0

文字列から正確にどのように削除しますか?あなたは削除操作の後に 'a'にあなたの望む出力を含めることができますか? –

答えて

1

正規表現はデフォルトでは欲張りです。あなたの表現は、あなたがいることでした最後)

への最初の(を取得します。代わりに

re.search(r'.*?\((.*)\).*', a) 

re.search(r'.*?\((.*?)\).*', a) 

ノート試合.*?の非欲張りバージョンを使用する(私はちょうど追加あなたの正規表現に疑問符を使って作業するようにしてください)

バリアント:グループの閉じ括弧を避ける

re.search(r'.*?\(([^)]*)\).*', a) 
0

これはそれを行うだろう:

out = re.match('.*?\((.*?)\)', a).groups()[0] 

あなたは元の文字列から削除したい場合は、コードの下

a.replace(out, '') 
+0

(NB、すべてのフラグメントが必要な場合は 're.split'もチェックしてください) – mdurant

0

は、文字列内のすべての一致を返します。

>>> import re 
>>> mystring = 'This is some text (- 1) - And some more text (0:0) - Some more Text' 
>>> regex = re.compile(".*?\((.*?)\)") 
>>> result = re.findall(regex, mystring) 
>>> result 
[' - 1', '0:0'] 

最初に取得するにはあなたがしたい値)は、インデックスを対応させてそれにアクセス:

>>> result[0] 
'-1' 
0

オプションのcount引数を使用して、文字列で見つかった最初の試合を置き換えるためにre.subを使用することができます。

>>>a = 'This is some text (- 1) - And some more text (0:0) - Some more Text' 
>>>re.sub(r'\(.+?\)','',a,count=1) 
-1

何について:

tmp_1 = str.split('(', mystring ) 
tmp_2 = str.split(')', tmp[1]) 
result = tmp[0] 

このプロセスは単純であり、そしてカッコが入れ子になっている場合は一般化することができます。

関連する問題