C# 类c逐字逐句字符串的正则表达式(处理类转义)
我正试图从rc文件中提取信息。在这些文件中,“-字符串中的字符是通过将它们加倍(“”)来转义的,类似于c#verbatim字符串。有方法提取字符串吗 例如,如果我有以下字符串“this is a”“test”“”,我想获得这是一个“test”“。它也必须是非贪婪的(非常重要) 我尝试使用以下正则表达式C# 类c逐字逐句字符串的正则表达式(处理类转义),c#,.net,regex,escaping,verbatim-string,C#,.net,Regex,Escaping,Verbatim String,我正试图从rc文件中提取信息。在这些文件中,“-字符串中的字符是通过将它们加倍(“”)来转义的,类似于c#verbatim字符串。有方法提取字符串吗 例如,如果我有以下字符串“this is a”“test”“”,我想获得这是一个“test”“。它也必须是非贪婪的(非常重要) 我尝试使用以下正则表达式 "(?<text>[^""]*(""(.|""|[^"])*)*)" “(?[^”“]*((.| | |[^]*)*)” 然而,演出很糟糕。 我是基于这里的解释: 有人知道如何使用
"(?<text>[^""]*(""(.|""|[^"])*)*)"
“(?[^”“]*((.| | |[^]*)*)”
然而,演出很糟糕。
我是基于这里的解释:
有人知道如何使用正则表达式来处理这个问题吗?这里有一些嵌套的重复量词 试着这样做:
(?<=")(?:[^"]|"")*(?=")
(?不知道这比m.buettner的好还是坏(我猜不出来-他似乎知道他的东西),但我想我会把它扔出去批评一下
"(([^"]+(""[^"]+"")*)*)"
试试这个(?这比你想象的要简单得多。一个带转义引号的字符串文字看起来就像一堆简单的字符串文字一起运行:
"Some ""escaped"" quotes"
"Some " + "escaped" + " quotes"
因此,您只需满足以下条件:
(?:"[^"]*")+
你必须在一个单独的步骤中去掉前导引号和尾随引号,但这不是什么大问题。无论如何,你都需要一个单独的步骤来取消转义引号(\“
或”
)。
- 匹配字符串开头的“a”
- 多次匹配一个非“或两个”
- 匹配一个“结束字符串”
"([^"]|(""))*?"
您正试图使用Perl来实现这一点吗?不,我使用的是C#。(我了解Perl并经常使用它,但我不能在这个应用程序中使用它)那么为什么它有一个Perl标记呢?:因为我认为它与Perl正则表达式有关。如果引起任何误解,我很抱歉。@m.buettner“这实际上比Perl的强大得多”-你开始了,试图开始一场斗争。我认为这与OP的尝试有相同的问题。但是如果你删除第二个”
和最后一个*
,它应该和我的一样好(甚至更好,因为它实现了“展开循环”优化技术)(@ridgerunner会唱一首关于它的歌,如果他看到这个答案:D))。但是,+
需要在双引号之间至少有一个非引号字符。你可能也应该让这些*
。(例如,“([^”]*(“[^”]*)”
“没有任何错误”,这是一个很好的说法,你不认为吗?)…这将很乐意匹配”在“
”上有一些“here”然后是“this”和“so”,但既不是“something”
,“something”
,也不是“something”像“this”
(后者是因为它不以三重码结尾,这是您的正则表达式所要求的)