VS 正则表达式 srch/repl - 如何忽略带有短语的行?



我知道以前有人问过这个问题,但是当我搜索时,我被大量无济于事的答案所淹没。

我正在使用Visual Studio将旧语言的代码转换为C#。 我可以将正则表达式用于我需要做的大部分事情。

旧语言不使用语句终止符。 所以我需要在每行不以//、foreach、if、switch、case 等开头(并且不为空)中添加一个。

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

无论如何,给定 VS 正则表达式搜索/替换选项,您会建议使用什么语法来基本上选择没有这些关键字的每一行并将 \r 替换为 ;\r?

我所需要的只是一个指向解决此问题的答案的链接,但正如我所说,到目前为止,我已经找到了一堆几乎但并不完全做到这一点的答案。

虽然我对基本的正则表达式感到满意,但我仍然在一些很酷的功能(向前/向后看等)方面苦苦挣扎。 因此,如果答案需要这种方法,也希望简要解释为什么使用它。

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

非常感谢您的帮助!

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

  • 将行首与^匹配
  • 将 0+ 空格与s*匹配(请注意,它不会匹配 VS 中的换行符)
  • 匹配这些可选空格之后的替代项之一://- 文字双斜杠,(?:foreach|if|switch|case)b- 整个单词foreachifswtichcase
  • $检查行尾
  • 将一行中的任何 1+ 个字符与.+匹配。
  • 确保该行不会以那些带有负前瞻的模式开头,(?!...)锚定在开头(即紧接在^之后)。

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

^(?!s*(?://|(?:foreach|if|switch|case)b)|$).+

要添加{},您可以使用字符类[{}]并将其添加为替代方法:

^(?!s*(?://|[{}]|(?:break|foreach|if|switch|case)b)|$)(.+‌​)

请注意,我删除了前瞻周围的分组,因为它始终不包含 NO TEXT,因为前瞻是一个零宽度断言,不会将文本返回到匹配项中。因此,您有 1 个组,如果您需要用其他东西替换该行,请通过$1访问它。

最新更新