VS regex srch / repl - 如何忽略带有短语的行?

时间:2016-12-06 20:24:40

标签: c# regex replace visual-studio-2015

我知道以前曾经问过这个问题,但是当我搜索时,我被埋没了大量无法帮助的答案。

我正在使用visual studio将旧语言的代码转换为C#。我可以使用Regex来完成我需要做的大部分工作。

旧语言没有使用语句终止符。因此,我需要在DOESNT以//,foreach,if,switch,case等开头的每一行中添加一个(并且不是空白)。

这是我下次完成并修复通用搜索/替换无法处理的所有代码之前剩下的唯一步骤。

无论如何,考虑到VS正则表达式搜索/替换选项,您建议使用什么语法基本上选择不具有这些关键字的每一行并将\ r \ n替换为\ r \ n?

所有我需要的是一个解决这个问题的答案的链接,但正如我所说,到目前为止,我已经找到了一堆答案,差不多,但并不是这样做。

虽然我对基本的正则表达式感到满意,但我仍然在努力解决一些很酷的功能(前瞻/后退等等)。因此,如果答案需要这样的方法,那么也会理解为什么使用这种方法的简要说明。

到目前为止,我一直在尝试基于使用^的选项 - 例如在[^(if | foreach | xxx)],但是不能选择不具备这些选项的行(至少不正确。)

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

在VS S& R中,您可以使用以下内容:

  • 将行的开头与^
  • 匹配
  • 将0+空格与\s*匹配(注意它不会与VS中的换行符匹配)
  • 在这些可选空格后匹配其中一个备选:// - 文字双斜线,(?:foreach|if|switch|case)\b - 整个字foreachifswtich和{ {1}}
  • 使用case
  • 检查行尾
  • 使用$匹配任意1个字符。
  • 确保该行不会以否定前瞻 .+固定在开始时(即(?!...)之后)的模式开始。

将它们组合成1个表达式:

^

要添加^(?!\s*(?://|(?:foreach|if|switch|case)\b)|$).+ {,您可以使用字符类}并将其添加为替代字段:

[{}]

注意我删除了前瞻周围的分组,因为它始终包含NO TEXT,因为前瞻是零宽度断言,不会将文本返回到匹配中。因此,如果您需要用其他内容替换该行,则onky有1个组并通过^(?!\s*(?://|[{}]|(?:break|foreach|if|switch|case)\b)|$)(.+‌​) 访问它。