re.findall("(100|[0-9][0-9]|[0-9])%", "89%")
この結果は[89]
の結果しか返しません。これは89%全体を返す必要があります。どのようにそれをしてくださいどのようなアイデアですか?Python - re.findallは不要な結果を返します
re.findall("(100|[0-9][0-9]|[0-9])%", "89%")
この結果は[89]
の結果しか返しません。これは89%全体を返す必要があります。どのようにそれをしてくださいどのようなアイデアですか?Python - re.findallは不要な結果を返します
自明な解:
>>> 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%']
>>> re.findall("(?:100|[0-9][0-9]|[0-9])%", "89%")
['89%']
findall
を返すだけcaptuキャプチャグループがあります赤い部分。括弧がキャプチャグループでないようにするには、?:
を使用します。
'100 | [0-9] [0-9] | [0-9]'を '\ d {1,3}'に変更するとパターンの意図が変わるでしょうか? – Bryan
は非キャプチャグループ内部のグループと、外側のグループを使用します。
>>> re.findall("((?:100|[0-9][0-9]|[0-9])%)","89%")
['89%']
が列してください。 '' 89% '' –