0

二重引用符で囲まれたすべての二重引用符をエスケープしたいとします (CSV などを想像してください)。

"Jim", "Smythe", "Favorite Quote: "This is my favorite quote.""

This is my favorite quote.を囲む内側の引用符を分離し、. でエスケープしたいと思い\ます。しかし、内側の引用符で一致する正規表現を書くのに苦労しています。したがって、私が望む結果の一致は次のとおりです。

"Jim", "Smythe", "Favorite Quote: "This is my favorite quote.""
                                  ^^                        ^^
                 Start Match Here ||                        || End Match Here
                Start Capture Here |       End Capture Here |

Match:   "This is my favorite quote."
Capture:  This is my favorite quote.

そして、パターン\"$1\"を使用して引用符を簡単にエスケープして、最終結果を取得できます。

"Jim", "Smythe", "Favorite Quote: \"This is my favorite quote.\""
4

2 に答える 2

2

私は提案します:

(?<!^|, )"(?=(?:(?<!"),|[^,])*"(?:,|$))

と置換する\\$0

正規表現101のデモ

于 2013-09-25T19:07:44.487 に答える
1

これは私のために働く:

string input = "\"Jim\" , \"Smythe\", \"Favorite Quote: \"This is my favorite quote.\"\"";
var output = Regex.Match(input,"\"(?!\\s*,\\s*\")((?<!(,|^)\\s*\"\\w*?)[^\"]+)\"").Groups[1].Value;
//output = This is my favorite quote.

var replacedOutput = Regex.Replace(input, "\"(?!\\s*,\\s*\")((?<!(,|^)\\s*\"\\w*?)[^\"]+)\"", "\\\"$1\\\"");
于 2013-09-25T19:04:56.537 に答える