次のようになります。
var result = Regex.Replace("FX(Y + 1, -(5 * 10) + FML(\"Test - KB\")",
"(?<=^([^\"]|\"[^\"]*\")*)-",
"-1 * ");
正規表現の説明:
(?<= # preceded by..
^ # the start of the string, then
([^"] # either not a " character
|"[^"]*" # or a string: "..."
)* # as many times as you want
)
- # then match the hyphen
サンプル文字列の出力は次のとおりです。
FX(Y + 1, -1 * (5 * 10) + FML("Test - KB")
(ターゲット言語でサポートされている場合、これは文字列エスケープを処理しないことに注意してください。)
このソリューションは、ヒューリスティックだけでなく、文字列を適切に処理します。次に例を示します。
FX(Y+1, -(X+Y) + "EMBEDDED: FX(Y + 1, -(5 * 10)" - (X+Y)
になる:
FX(Y+1, -1 *(X+Y) + "EMBEDDED: FX(Y + 1, -(5 * 10)" -1 * (X+Y)
他の部分と「似ている」場合でも、弦には触れないように注意してください。