146

正規表現構文を使用してすべてのグループを直接置き換える方法はありますか?

通常の方法:

re.match(r"(?:aaa)(_bbb)", string1).group(1)

しかし、私はこのようなことを達成したいと思います:

re.match(r"(\d.*?)\s(\d.*?)", "(CALL_GROUP_1) (CALL_GROUP_2)")

正規表現がキャプチャしたグループから、新しい文字列を即座に作成したいと思います。

4

2 に答える 2

256

見てくださいre.sub

result = re.sub(r"(\d.*?)\s(\d.*?)", r"\1 \2", string1)

これはPythonの正規表現置換(置換)関数です。置換文字列は、グループによって一致したものに置き換えられる、いわゆるバックリファレンス(バックスラッシュ、グループ番号)で埋めることができます。グループは、関数と同じようにカウントされgroup(...)ます。つまり1、左から右に、括弧を開いてカウントされます。

于 2012-12-22T23:48:38.090 に答える
58

受け入れられた答えは完璧です。この構文を使用すると、グループ参照の方がおそらくより適切に達成されることを付け加えておきます。

r"\g<1> \g<2>"

置換文字列用。このようにして、グループの後に数字が続く可能性がある構文上の制限を回避します。繰り返しになりますが、これはすべてドキュメントに存在し、新しいものではなく、一目で見つけるのが難しい場合があります。

于 2018-06-06T11:02:45.477 に答える