2

re.sub に代替の置換パターンを提供したい。

次のように、代替手段として 2 つの検索パターンがあるとします。

re.sub(r"[A-Z]+|[a-z]+", replacementpattern, string)

そして、1 つの置換パターンを提供する代わりに、どの検索パターンの代替が一致したかをどうにかしてキャッチし、代替の置換パターンを提供したいと考えています。これは可能ですか?ありがとう。

PS。ここでのコードの詳細は関係ありません。これは一般的な質問です。

4

2 に答える 2

2

に関数を渡すことができます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置換文字列です。

詳細については:ドキュメント

于 2016-06-12T18:29:43.330 に答える
2

通常、次の 2 つの置換を使用します。

re.sub(r"[A-Z]+", replacement1, string)
re.sub(r"[a-z]+", replacement2, string)

反気候的ですよね?

実際には、通常の代替手段よりもコードが少なく、何をしているのかがはるかに明確です。

于 2016-06-12T20:01:52.623 に答える