Python Regexは即座にグループを置き換えます


106

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

通常の方法:

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

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

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

Regexがキャプチャしたばかりのグループから、新しい文字列を瞬時に作成したいと思います。

回答:


189

見てre.subください:

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

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


4
ドキュメントよりもはるかに明確です!グループがこれをどのように処理しているか理解できませんでした。彼らはそのような例を加えるべきです。
Y0da

それは最初から機能しました、これはそれを説明するためのかなり良い明確な方法です。ありがとう、サブグループがどのように適切な方法で呼び出す必要があるかを説明できます(r(r))r((r)((r)r))か?
Rakshitha Muranga Rodrigo

1
@RakshithaMurangaRodrigoグループは、左から右に番号が付けられ、開始位置から順に並んでいます。したがって、各グループの番号をグループの直前に挿入すると、並べ替えられます1(r2(r))r3(4(r)5(6(r)r))
マーティンエンダー2018

@MartinEnder:どうもありがとう!
Rakshitha Muranga Rodrigo 2018

30

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

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

置換文字列用。このようにして、グループの後に数字が続く可能性がある構文の制限を回避します。繰り返しますが、これはすべてドキュメントに記載されており、目新しいものを見つけるのが難しいことはありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.