/s
Matz は、他のすべての正規表現フレーバーで使用されている修飾子 (SINGLELINE
または DOTALL
) の名前を Ruby の/m
( ) 修飾子 (トークンMULTILINE
によって改行が「任意の文字」として扱われるかどうかを扱う)に変更することで、すべての人を混乱させることを選択したことを知っておく必要があります)。.
逆に、/m
orMULTILINE
修飾子 (文字列全体の開始/終了だけでなく、行の開始/終了で^
and が$
一致するかどうかを決定する) を呼び出す他のフレーバーは、Ruby にはまったく存在しません。これらのアンカーは、常に行頭 /行末で一致します。
したがって、コードを Ruby から Python に変換するには、次のことを行う必要があります。
def reindent(line, numIndent):
return re.sub(r'(.)^', r'\1' + ' ' * numIndent, line, flags=re.DOTALL|re.MULTILINE)
最初の行を除くすべての行をインデントすることが目標である場合 (これが実行されていることです)、正規表現を単純化できます。
def reindent(line, numIndent):
return re.sub(r'(?<!\A)^', ' ' * numIndent, line, flags=re.MULTILINE)
結果:
>>> s = "The following lines\nare indented,\naren't they?"
>>> print(reindent(s,1))
The following lines
are indented,
aren't they?