使用正则表达式查找C#样式的非转义字符串

时间:2010-02-19 11:12:59

标签: c# regex quotes

我正在尝试编写一个找到C#式非转义字符串的正则表达式,例如

string x = @"hello
world";

我遇到的问题是如何编写一个正确处理字符串中双引号的规则,如本例所示

string x = @"before quote ""junk"" after quote";

这应该是一个简单的,对吧?

6 个答案:

答案 0 :(得分:1)

试试这个:

@".*?(""|[^"])"([^"]|$)

第一个parantheses意味着'如果有一个'在完成报价之前,最好是其中两个',第二个parantheses意味着'在完成报价之后,可能以太没有报价,或者行结束”。

答案 1 :(得分:0)

如何使用正则表达式@\"([^\"]|\"\")*\"(?=[^\"])

由于贪婪的匹配,你的正则表达式引擎可能不需要最后的超前条款,尽管它更具体。

答案 2 :(得分:0)

如果我没记错的话,你必须使用\“” - 双引号将其哈希为C#,反斜杠将哈希值用于正则表达式。

答案 3 :(得分:0)

试试这个:

@"[^"]*?(""[^"]*?)*";

查找起始字符@“,结尾字符”; (如果需要,你可以把分号留出来),除了引号之外,它可以有任何字符,或者如果有引号,它们必须加倍。

答案 4 :(得分:0)

"^@(""|[^"])*$"是你想要的正则表达式,首先找到一个at-sign和一个双引号,然后是一系列任何字符(双引号除外)或双引号,最后是双引号报价。

作为C#中的字符串文字,您必须将其写为string regex = "^@\"(\"\"|[^\"])*\"$";string regex = @"^@""(""""|[^""])*""$";。选择你的毒药。

答案 5 :(得分:0)

@"(?:""|[^"])*"(?!")

是这项工作的正确正则表达式。它匹配@,一个引号,然后连续两个引号或任何非引号字符,重复这个到下一个引号(不加倍)。