web-dev-qa-db-ja.com

括弧の間にテキストを返す正規表現

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

必要なのは、括弧内のコンテンツです。

81
user469652

問題が本当にこれだけの場合、正規表現は必要ありません。

s[s.find("(")+1:s.find(")")]
204
tkerwin

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'"
48
waan

すべてのオカレンスを検索する場合:

>>> 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']
30
TheSoulkiller

Tkerwinの答えに基づいて、たまたま入れ子になった括弧がある場合

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

first開き括弧last閉じ括弧(a+b)/(c+d)を取得します。文字列の左から検索を検索し、最初の閉じ括弧で停止するためです。

これを修正するには、操作の2番目の部分にrfindを使用する必要があります。

st[st.find("(")+1:st.rfind(")")]
18
FaustoW
import re

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

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