re.sub に代替の置換パターンを提供したい。
次のように、代替手段として 2 つの検索パターンがあるとします。
re.sub(r"[A-Z]+|[a-z]+", replacementpattern, string)
そして、1 つの置換パターンを提供する代わりに、どの検索パターンの代替が一致したかをどうにかしてキャッチし、代替の置換パターンを提供したいと考えています。これは可能ですか?ありがとう。
PS。ここでのコードの詳細は関係ありません。これは一般的な質問です。
re.sub に代替の置換パターンを提供したい。
次のように、代替手段として 2 つの検索パターンがあるとします。
re.sub(r"[A-Z]+|[a-z]+", replacementpattern, string)
そして、1 つの置換パターンを提供する代わりに、どの検索パターンの代替が一致したかをどうにかしてキャッチし、代替の置換パターンを提供したいと考えています。これは可能ですか?ありがとう。
PS。ここでのコードの詳細は関係ありません。これは一般的な質問です。
に関数を渡すことができますre.sub()
。この関数では、キャプチャされたグループに基づいて必要な値を返すことができます。説明のための簡単なコード:
>>> def fun(m):
... if m:
... if m.group(1):
... return 'x'
... else:
... return 'y'
>>>print re.sub(r"([A-Z]+)|([a-z]+)", fun , "ab")
この関数fun()
は、一致が成功したかどうかを確認し、キャプチャされたグループに基づいて、置換文字列を返します。[A-Z]+
が一致した場合x
は、置換文字列です。それ以外の場合は[a-z]+
一致し、y
置換文字列です。
詳細については:ドキュメント
通常、次の 2 つの置換を使用します。
re.sub(r"[A-Z]+", replacement1, string)
re.sub(r"[a-z]+", replacement2, string)
反気候的ですよね?
実際には、通常の代替手段よりもコードが少なく、何をしているのかがはるかに明確です。