繁体   English   中英

如何在MSVS 2012+编辑器(和.NET?)中使用正则表达式替换插入'\\'+'n'

[英]How do I insert ‘\’+‘n’ using regex replacement in MSVS 2012+ editor (and .NET?)

在Visual Studio 2013的编辑器中,我理解它与2012非常相似, 据称使用.NET正则表达式,我无法获得替换字符串以插入反斜杠和' n ' - 甚至可能吗?

我希望在C程序的某些(但不是全部)行的第一个“ "之后插入' \\n ',即使字符串文字以新行开头。显然,要查找的表达式是' ^([^"]*)" ',替换是......什么?' $1" '+ magic +' n ',其中魔术就是插入反斜杠。 我不是想编写.NET代码来执行此操作,而是在编辑器中以交互方式执行此操作。

注意这个问题并不适用于2010 MSVS,它有一个较旧的RE语法。

正式 …

.NET引用中的替换都不合适。
Regular-expressions.info说' 你不能也不必逃避反斜杠,感叹号或除了美元之外的任何其他字符,因为它们在.NET,JavaScript,VBScript和PCRE2替换字符串中没有特殊含义 ' - 但是MSVS RE Replace似乎将替换中的' \\n '视为新行!
RegexHero (用于.NET)表示' ^([^"]*)" '→' $1"\\n '转换' asdf"qwer '→' asdf"\\nqwer ',这与Regular-expressions.info一致。

结论

我的印象 - 恐惧 - 是MSVS IDE在将它传递给RE引擎之前在编辑对话框中转换了一些C风格的转义,例如' \\n ',' \\r '和' \\t ',但是留下了其他的反斜杠不变。 特别是,它不提供诸如' \\\\ '(或' $\\ ')之类的形式,因为可能需要插入反斜杠。 鉴于记录的RE引擎行为,这是对我有意义的唯一解释; 结论是您不能插入被解释为C样式转义的一部分的反斜杠。

实验

我为魔术尝试了各种各样的东西:

  • 即使在' n '之前,这些都会自我产生:
    • ' \\\\ '
    • ' \\134 '
    • ' \\x5cn '
  • \\ ”前“ n ”产生一个新的线
  • $\\ ”之前“ n ”收益率“ $ ” +新行

解决方法

我怀疑我必须做两步工作,例如:

  • ' ^([^"]*)" '→' $1"\\\\n '
  • ' ^([^"]*"\\\\)\\\\ '→' $1 '

......有效,但比一步解决方案更笨拙,更容易出错。

我希望在第一个'''之后插入'\\ n'

如果一个人不使用正则表达式而是使用标准文本搜索和替换,则可以完成。 但是人们需要亲自动手去跳过你不想要的报价。

我会使用NotePad ++作为正则表达式^\\x22 (\\ x22是引用的转义,我在处理正则表达式模式时的习惯,而不是字面上逃避C#编译器的引用例如"" = \\x22 )和替换\\\\n工作并用Notepad ++中的文字\\n替换行的第一个引号。


注意查看处理特殊字符时报告的其他异常:

查找和替换对话框正则表达式替换无法转义“$”符号| Microsoft Connect


在具有宏功能的Visual Studio的旧版本中,这可以实现。

您的正则表达式似乎有效。 以下代码将显示true:

var test = "asdf\"qwer";
var replaced = Regex.Replace(test, "^([^\"]*)", "$1\n");
Console.WriteLine(replaced[4] == '\n');

也许你需要一个"\\r\\n"作为@ stephen.vakil建议或其他东西导致你的代码出现问题。

尝试$1\\r\\n - 它在VS 2013中适用于我。假设您需要一个新行,而不是专门\\n

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM