1

私はこのようなものを一致させようとしてきました

mystring = "kdjf4kf., kfg. (KFJG)"
regex = r'.+\(\w+\)'  

しかし、それは機能していません。何も見つかりません。KFJGを推定したいと思います。どうすればいいですか?

例:

>>> a = "Amazon (AMZN)"
>>> regex = '.?(\w+)'
>>> match = re.match(regex, a)
>>> match.group(0)  
'Amazon'  
>>> match.group(1)  
'mazon'
4

2 に答える 2

4

キャプチャ グループ内に一致を含めるのを忘れたため

>>> re.findall(r'.+\((\w+)\)', mystring)
['KFJG']
于 2012-12-12T06:21:45.020 に答える
1
>>> regex = '.?(\w+)'  

。?->これは、文字/数字(\ w +)が存在する可能性があることを意味します->これは、スペースが発生するまで文字をキャプチャすることを意味します

match.group(0)一致させたい文字列を返すので、「Amazon」と表示されます

match.group(1)文字列に一致する最初の括弧でグループ化されたコンテンツを返します、

'.?(\w+)'文字列(mazon)と一致することを意味します。文字列(mazon)の前に文字(A)がある可能性があります。

コード内の括弧は、正規表現では別の意味を持ちます。つまり、後で使用するためにコンテンツをグループ化し、ここで一致するパターンとしては機能しません。

本当に必要なのは、括弧内のコンテンツをキャプチャすることです。括弧は、「\」を入力して定期的にエスケープする必要があります。

>>> regex = '.*\((\w+)\)'
>>> match = re.match(regex, a)
>>> match.group(0)
'Amazon (AMZN)'
>>> match.group(1)
'AMZN'

'.*\((\w+)\)'はじけよう!

...- \(_____\)>これは括弧と一致することを意味します

.....- (___) >これは、match.group(1)のコンテンツ内のグループを意味します

....... \ w +->これは、1つ以上の文字に一致することを意味します

于 2012-12-12T07:02:56.613 に答える