C# 正则表达式查找并转义双引号中的双引号
假设我想转义嵌套在双引号中的所有双引号(如CSV之类的图片): 我想把C# 正则表达式查找并转义双引号中的双引号,c#,regex,C#,Regex,假设我想转义嵌套在双引号中的所有双引号(如CSV之类的图片): 我想把这是我最喜欢的引语。周围的内部引语分离出来,然后用\将它们转义。但是我在编写正则表达式来匹配内部引号时遇到了麻烦。因此,我想要的结果匹配是: "Jim", "Smythe", "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.\""
这对我很有用:
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\\\"");
string input=“\'Jim\”、\'Smythe\”、\'Favorite Quote:\“这是我最喜欢的Quote.\”;
var output=Regex.Match(输入“\”(?!\\s*,\\s*\”)((?这对我来说很有用:
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\\\"");
string input=“\'Jim\”、\'Smythe\”、\'Favorite Quote:\“这是我最喜欢的Quote.\”;
var output=Regex.Match(输入“\”(?!\\s*,\\s*\”)((?我建议:
(?<!^|, )"(?=(?:(?<!"),|[^,])*"(?:,|$))
(?我建议:
(?<!^|, )"(?=(?:(?<!"),|[^,])*"(?:,|$))
(?通常,在将值放入行之前,应先转义该值。如果在之后转义,则只能处理可以确定它是引号而不是值结尾的情况。例如,如果引号是逗号,则无法将其与值分隔符区分开来。我的第一个猜测是,由于在这个问题中指定的ason-类似这样的:/”(?:[^\\”]\124\\)*“/
?@Jerry我没有得到任何合理的尝试,不确定它是否可以完成(至少不可靠)。除非外部字符串(如CSV)有某种可定义的格式不能出现在内部字符串中(内部字符串中不能出现转义逗号吗?),这是不可能的,因为您无法区分“
和"
。通常,您应该在将值放入行中之前对其进行转义。如果之后进行转义,则只能处理可以确定它是引号而不是值结尾的情况。例如,如果引号是逗号,则无法将其与值分隔符区分开来。我的第一个猜测是,由于对于这个问题中指定的原因,比如:/”(?:[^\\“]\124\\)*“/
?@Jerry我还没有得到任何合理的尝试,不确定它是否可以完成(至少不可靠)。除非外部字符串(如CSV)有某种可定义的格式不能出现在内部字符串中(内部字符串中不能出现转义逗号吗?),这是不可能的,因为您无法区分“
和”
。您可以使用前面带有@
的代码,这样您就不必使用太多的转义,即@”(?和@“\\\$0”
事实上,我测试了这一点,它有点失败了“
在Jim
匹配后。我用RegexBuddy
@KingKing进行了测试,我用Expresso(基于C#regex引擎)进行了测试)它适用于我给出的示例。@JoshM。你应该注意到它的味道,看起来regex101演示版是针对PHP味道的,而它不适用于.NET味道的。看到这个屏幕截图@KingKing第一个引用后面的空间是从哪里来的吗?顺便说一句,你使用前面带有@
的那些首先,你不必使用太多的转义,即@(?和@“\\\$0”
事实上我测试了这个,它有点失败Jim
匹配后的“
。我用RegexBuddy
@KingKing进行了测试,我用Expresso(基于C#regex引擎)进行了测试它适用于我给出的示例。@JoshM。你应该注意到它的味道,看起来regex101演示版是针对PHP味道的,而它不适用于.NET味道的。看到这个屏幕截图@KingKing第一个引用后面的空间是从哪里来的?