Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正则表达式查找并转义双引号中的双引号_C#_Regex - Fatal编程技术网

C# 正则表达式查找并转义双引号中的双引号

C# 正则表达式查找并转义双引号中的双引号,c#,regex,C#,Regex,假设我想转义嵌套在双引号中的所有双引号(如CSV之类的图片): 我想把这是我最喜欢的引语。周围的内部引语分离出来,然后用\将它们转义。但是我在编写正则表达式来匹配内部引号时遇到了麻烦。因此,我想要的结果匹配是: "Jim", "Smythe", "Favorite Quote: "This is my favorite quote."" ^^ ^^

假设我想转义嵌套在双引号中的所有双引号(如CSV之类的图片):

我想把
这是我最喜欢的引语。
周围的内部引语分离出来,然后用
\
将它们转义。但是我在编写正则表达式来匹配内部引号时遇到了麻烦。因此,我想要的结果匹配是:

"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第一个引用后面的空间是从哪里来的?