将正则表达式重新格式化为C#逐字字符串文字

时间:2015-01-07 05:08:47

标签: c# .net regex

我有一个正则表达式模式,并希望在字符串前面使用@符号,这样您就不需要转义正则表达式转义符。当我尝试时,我不断收到编译错误,说“只能在一个语句中使用赋值,调用,递增,递减和新对象表达式”。我确定在使用@之前我需要删除字符串中的转义字符。但是我无法让它发挥作用。有人可以帮助将以下字符串模式修改为在开始时使用@。

^\\s*\\{(\\s*,?\\s*\\\"([^\"]*)\\\"\\s*:\\s*\\\"([^\"]*)\\\")*\\}\\s*$

1 个答案:

答案 0 :(得分:2)

所以你有一个用C语言或Java语言编写的正则表达式,它没有正则表达式文字或友好的引用机制(比如Python的原始字符串),你想把它包括在内一个C#程序,使用逐字字符串文字来消除多余的反斜杠。我确定您知道C#仍然支持旧式引号,因此您可以按原样使用正则表达式:

"^\\s*\\{(\\s*,?\\s*\\\"([^\"]*)\\\"\\s*:\\s*\\\"([^\"]*)\\\")*\\}\\s*$"

但这里是一个逐字字符串:

@"^\s*\{(\s*,?\s*\""([^""]*)\""\s*:\s*\""([^""]*)\"")*\}\s*$"

这是由RegexBuddy产生的。顺便说一句。我粘贴在第一个字符串(带引号),告诉它它来自Java程序,它摆脱了封闭的引号和额外的反斜杠。然后我告诉它我正在将它复制到C#程序,所以它添加了新的引号(@"...")并在正则表达式中加倍引号。这是RB能做的最少 - 强烈推荐!

它没有做的是在内部引号之前摆脱额外的反斜杠。也就是说,它忠实地将\\\"转换为\""。这不是不正确的,但引号字符在正则表达式中没有特殊含义,因此不需要反斜杠。以下是我的写作方式:

@"^\s*\{(\s*,?\s*""([^""]*)""\s*:\s*""([^""]*)"")*\}\s*$"