将正则表达式重新格式化为 C# 逐字字符串文字
Reformat a regex as a C# verbatim string literal
我有一个正则表达式模式,想在字符串前面使用 @ 符号,这样您就不需要对正则表达式转义字符进行转义。当我尝试这样做时,我不断收到编译错误 "Only assignment, call, increment, decrement and new object expressions can be used in a statement"。我确定在使用 @ 之前我需要删除字符串中的转义字符。但是我无法让它工作。有人可以帮助修改以下字符串模式以在开头使用@。
^\s*\{(\s*,?\s*\\"([^\"]*)\\"\s*:\s*\\"([^\"]*)\\")*\}\s*$
所以你有一个用像 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*$"
我有一个正则表达式模式,想在字符串前面使用 @ 符号,这样您就不需要对正则表达式转义字符进行转义。当我尝试这样做时,我不断收到编译错误 "Only assignment, call, increment, decrement and new object expressions can be used in a statement"。我确定在使用 @ 之前我需要删除字符串中的转义字符。但是我无法让它工作。有人可以帮助修改以下字符串模式以在开头使用@。
^\s*\{(\s*,?\s*\\"([^\"]*)\\"\s*:\s*\\"([^\"]*)\\")*\}\s*$
所以你有一个用像 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*$"