2011-02-04 8 views
52
u'abcde(date=\'2/xc2/xb2\',time=\'/case/test.png\')' 

必要なものはすべて括弧内の内容です。括弧内にテキストを返す正規表現

+0

ブラケットになるのでしょうか?私は括弧が見えません。あなたはかっこを意味しましたか? – kzh

+2

二重引用符を使用しないのはなぜですか?これは、文字列を読みやすくします。つまり、 'u" abcde(date = '2/xc2/xb2'、time = '/ case/test.png')です。 " – kzh

+0

この質問は神経質になります。私は卑劣な疑惑を得るOP *本当に* astの機能を望んでいるだけでそれが存在するのか分からない。 – Kevin

答えて

131

あなたの問題が実際には、この単純な場合、あなたは正規表現は必要ありません:あなたはすべての出現箇所を検索したい場合は

s[s.find("(")+1:s.find(")")] 
+2

'('と ')'がない場合はどうなりますか?あなたはs [0:-1]を得ます。つまり、あなたは何でも ":"を得ることになります。文字列に括弧が最初に付いていることを確認すると良いでしょう。 – Omar

+1

"(いくつかのテキスト(いくつかのテキストが内括弧で囲まれています)もう少しテキストがあるでしょうか?" –

+0

その後、問題は元の問題ほど単純ではなく、別の解決策が必要になります。 – tkerwin

28

使用re.search(r'\((.*?)\)',s).group(1)

>>> import re 
>>> s = u'abcde(date=\'2/xc2/xb2\',time=\'/case/test.png\')' 
>>> re.search(r'\((.*?)\)',s).group(1) 
u"date='2/xc2/xb2',time='/case/test.png'" 
2
import re 

fancy = u'abcde(date=\'2/xc2/xb2\',time=\'/case/test.png\')' 

print re.compile("\((.*)\)").search(fancy).group(1) 
19

を:

>>> re.findall('\(.*?\)',s) 
[u"(date='2/xc2/xb2',time='/case/test.png')", u'(eee)'] 

>>> re.findall('\((.*?)\)',s) 
[u"date='2/xc2/xb2',time='/case/test.png'", u'eee'] 
6

tkerwin's答えは、あなたは次のように括弧を入れ子にしているために起こる場合で

st = "sum((a+b)/(c+d))" 

あなたが(a+b)/(c+d)を取得するために最初左括弧最後閉じ括弧間のすべてを取る必要がある場合は、彼の答えは動作しません。 findは文字列の左側から検索し、最初の閉じ括弧で停止するためです。

はそれを修正するには、操作の第二部のためrfindを使用する必要があるので、それは

st[st.find("(")+1:st.rfind(")")] 
関連する問題