【问题标题】:Global find and replace with newline in Visual Studio Code在 Visual Studio Code 中使用换行符进行全局查找和替换
【发布时间】:2017-06-20 16:45:18
【问题描述】:

假设我想在我的项目中删除与正则表达式匹配的所有行。有没有办法做到这一点?

我尝试过使用启用正则表达式的全局查找和替换功能:

  1. foo|bar 替换为空字符串。这不起作用,因为它在那里留下了一个空字符串。我想删除换行符。

  2. (foo|bar)\n 替换为空字符串。这实际上不匹配任何东西。

  3. (foo|bar)$ 替换为空字符串。同样,什么都不匹配。

有什么想法吗?

编辑:我的一些文件似乎有 Windows 行结尾,所以 (foo|bar)\r?\n 确实匹配。但是,当您将其替换为空字符串时,它实际上仍将行尾保留在那里。

这是一个测试用例:

a
foo
b

应该是这样的:

a
b

不是这样的:

a

b

【问题讨论】:

  • “当你用一个空字符串替换它时,它实际上仍然把行尾留在那里”——这对我来说是预期的:i.imgur.com/7C4QES2.gifv
  • 如果您在^(?:foo|bar)\s* 上进行查找和替换怎么办?
  • 相关无回答:Replace line breaks
  • @Gama11:在单文件查找和替换中。我的意思是 global (左侧的放大镜)。不确定它的正式名称。

标签: regex visual-studio-code


【解决方案1】:

foo\n^(foo|bar)\n^ 都可以。

我刚刚在我的 vs 代码中进行了测试 - 你将替换字符串留空

【讨论】:

    【解决方案2】:

    是的,可以使用跨文件搜索功能删除整行。

    我猜最初的问题是由于旧版本的 VSCode 中的错误或其他不需要的行为。在 VSCode 1.37.1 中,只要 \n 包含在正则表达式中,就会删除该行。特别是,正则表达式 (foo|bar)\n,在原始问题中描述为不起作用,现在可以正常工作。

    之前:

    按下“全部替换”按钮后:

    相关观察:

    • 即使我将文件行结尾设置为 CRLF,同样的正则表达式仍然有效。

    • 附加^ 没有区别。这有点令人惊讶,但也许“换行之后”算作“行首”。

    • 附加 $ 会导致正则表达式不匹配任何内容。考虑到^ 的行为,这相当令人惊讶。

    • 我查看了搜索配置设置,但似乎没有任何影响。

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 2014-10-29
      • 2020-10-06
      • 2015-08-06
      • 2014-07-08
      • 1970-01-01
      • 2017-05-09
      • 2018-05-26
      相关资源
      最近更新 更多