c#逐字表示字符串的正则表达式(处理"类似转义")

Mar*_*nBE 5 .net c# regex escaping verbatim-string

我正在尝试从rc文件中提取信息.在这些文件中,"字符串中的-chars通过将它们加倍("")来转义为类似于c#逐字字符串.是否可以提取字符串?

例如,如果我有以下字符串"this is a""test"""我想获得这是一个""测试"".它也必须是非贪婪的(非常重要).

我试过使用以下正则表达式;

"(?<text>[^""]*(""(.|""|[^"])*)*)"
Run Code Online (Sandbox Code Playgroud)

然而,表现很糟糕.我基于这里的解释:http://ad.hominem.org/log/2005/05/quoted_strings.php

有没有人有任何想法使用正则表达式处理这个?

Mar*_*der 5

你有一些嵌套的重复量词.这对于表现来说可能是灾难性的.

尝试这样的事情:

(?<=")(?:[^"]|"")*(?=")
Run Code Online (Sandbox Code Playgroud)

现在只能一次消耗两个引号...或非引号字符.lookbehind和lookahead声明,实际匹配之前和之后是引号.

这也让你不得不捕获任何东西.您想要的结果将只是您想要的完整字符串(没有外部引号).

我并不断言外部报价不会加倍.因为如果它们是,那么无论如何也无法将它们与空字符串区分开来.