2013-04-16 12 views
5
re.findall("(100|[0-9][0-9]|[0-9])%", "89%") 

この結果は[89]の結果しか返しません。これは89%全体を返す必要があります。どのようにそれをしてくださいどのようなアイデアですか?Python - re.findallは不要な結果を返します

+0

が列してください。 '' 89% '' –

答えて

6

自明な解:

>>> re.findall("(100%|[0-9][0-9]%|[0-9]%)","89%") 
['89%'] 

もっと美しいソリューション:

>>> re.findall("(100%|[0-9]{1,2}%)","89%") 
['89%'] 

きれいな解決策:

>>> re.findall("(?:100|[0-9]{1,2})%","89%") 
['89%'] 
10
>>> re.findall("(?:100|[0-9][0-9]|[0-9])%", "89%") 
['89%'] 

findallを返すだけcaptuキャプチャグループがあります赤い部分。括弧がキャプチャグループでないようにするには、?:を使用します。

+0

'100 | [0-9] [0-9] | [0-9]'を '\ d {1,3}'に変更するとパターンの意図が変わるでしょうか? – Bryan

2

は非キャプチャグループ内部のグループと、外側のグループを使用します。

>>> re.findall("((?:100|[0-9][0-9]|[0-9])%)","89%") 
['89%'] 
関連する問題