web-dev-qa-db-ja.com

Python正規表現は即座にグループを置き換えます

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

通常の方法:

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

しかし、私はこのような何かを達成したい:

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

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

76
user1467267

_re.sub_ を見てください:

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

これはPythonの正規表現置換(置換)関数です。置換文字列には、グループと一致したもので置換されるいわゆる後方参照(バックスラッシュ、グループ番号)を入力できます。グループは、group(...)関数と同じようにカウントされます。つまり、1_から始まり、左から右へ、括弧が開きます。

136
Martin Ender

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

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

置換文字列用。これにより、グループの後に数字が続く場合の構文の制限を回避できます。繰り返しますが、これはすべてドキュメントに存在し、新しいものは何もありません。

20
benelgiac