さて、通常、私はこれらの質問をしません。Python:正規表現の置き換え
re.subを使用して通常の文字列を検索して置き換えるのは簡単ですが、(一致する部分ではなく)置換部分の正規表現がどのように機能しますか?
特に、を参照すると、正確にこれを説明し、彼がPearlで使用していたのと同じ種類の機能を複製するコードを提供しますが、Pythonで開発するのに苦労しました。
import fileinput
import re
for line in fileinput.input():
line = re.sub(r'\* \[(.*)\]\(#(.*)\)', r'<h2 id="\2">\1</h2>', line.rstrip())
print(line)
このサブは
* [the label](#the_anchor)
と一致して
<h2 id="the_anchor">the label</h2>
それは作品に置き換えることを意味している。しかし、どのようにスクリプトがラベルとアンカーが何であるかを正確に知っているのですか?おそらく\ 1と\ 2は目的のテキストと一致することを意図していますが、スクリプトはこれをどのように知っていますか、先頭の*が\ 1を参照しているとは思わないでしょうか?
括弧のためです。置換の '\ 1'は、正規表現の最初のペア(すなわち、最初の'(*))と一致したものを参照します。 – drdaeman
'\ 1'、' \ 2'は置き換えられるパターンの最初と2番目の一致したグループです。グループはカッコ内のパターンの部分です。 – schwobaseggl
'\(GroupReference)'は、一致するテキストにあったグループを参照するためのものです。グループが何であるかわからない場合は、それらを調べることをお勧めします。この場合、 '\ 1'と' \ 2'はグループ1と2への参照、つまり第一と第二の対の '()'括弧内のものです。 –