私は困惑しています。私はIDEとしてPyCharmを使ってPython 3.6.2をコーディングしています。次のスクリプトフラグメントは私の問題を示していますPythonはre.findallとは異なる動作をします
def dosubst(m):
return m.group() + "X"
line = r"set @message = formatmessage('%s %s', @arg1, @arg2);"
m = re.findall(r"@\w+\b", line, re.IGNORECASE)
print(m[0]) # prints "@message"
print(m[1]) # prints "@arg1"
print(m[2]) # prints "@arg2"
foo = re.sub(r"@\w+\b", dosubst, line, re.IGNORECASE)
print(foo) # prints "set @messageX = formatmessage('%s %s', @arg1X, @arg2);"
あなたはre.findall
は3試合を見つけることがわかります。ただし、re.sub
は、dosubst
関数を2回だけと呼びます。 @message
をmessage
に変更した場合は、はまだdosubst
を2回呼び出しますが、@arg1
と@arg2
をピックアップします。うんざりする私はそれが貪欲対ポジティブかもしれないと思ったが、@message
をmessage
に変更すると、結果としてその動作は無効になる。誰でも説明できますか?私は、いくつかの基本的なテキスト解析を行い、多数のファイルのメッセージフォーマットをリファクタリングするようにしようとしています。私はregexr.comを使用して、私が行う正規表現の大部分のプロトタイプを作成します。また、パターン内にパターンが3回出現することもあります。ありがとう。