如何在Visual Studio代码中替换文档中的每一个换行符,而不是每两个换行符(或更多)?

问题描述 投票:2回答:5

我通过FTP下载文件,并在每行后添加换行符。现在,在我的代码中,我为上下文添加了空白行。下载后,我添加的每个空行现在是三个空行。

因此,如果我删除所有空白行与正则表达式,如^\n,它也会删除我为上下文添加的那些行。而这个^\n{1}也没有帮助。

这是我通过FTP下载后的HTML示例:

<nav>

  <ul>

    <li><a href="#">London</a></li>

    <li><a href="#">Paris</a></li>

    <li><a href="#">Tokyo</a></li>

  </ul>

</nav>



<div>new context</div>



<div>new context</div>

这就是我希望它看起来像:

<nav>
  <ul>
    <li><a href="#">London</a></li>
    <li><a href="#">Paris</a></li>
    <li><a href="#">Tokyo</a></li>
  </ul>
</nav>



<div>new context</div>



<div>new context</div>

基本上我需要的是一个正则表达式,它可以找到不在另一个空行之前或之前的所有空行。

regex visual-studio-code
5个回答
3
投票

这可以找到一个空白行

发现:(\S[^\S\n]*\n)[^\S\n]*\n(?![^\S\n]*\n) 替换:$1

https://regex101.com/r/7IbV1Y/1

解释

 ( \S [^\S\n]* \n )            # (1) A line with a piece of non-wsp text 
 [^\S\n]* \n                   # Single blank line with a line break
 (?! [^\S\n]* \n )             # Not a blank line with a line break ahead

1
投票

尝试这样的事情:

(?<!\n)\n(?!\n$)

使用gm选项并替换为空字符串。

有关工作示例,请参阅https://regex101.com/r/uEpQ0L/1


1
投票

你可能会做的是匹配一条存在至少非空白字符的行。然后匹配以下空行,后跟换行符。这也将考虑空行本身是否包含空格。

然后使用正向前瞻来断言在下一行中存在非空白字符。

将这些匹配替换为第一个捕获组$1

^([ \t]*\S.*\n)[ \t]*$\n(?=[ \t]*\S)

这将匹配

  • ^字符串的开头
  • (捕获组 [ \t]*\S.*\n匹配空格或制表符的0+倍,然后是非空格字符,然后匹配,直到字符串的结尾和换行符
  • )关闭组
  • [ \t]*$\n匹配空行或仅匹配空格或制表符
  • (?=积极前瞻,断言如下 [ \t]*\S)匹配空格或制表符的0+倍,后跟非空格字符
  • )关闭前瞻

Regex demo


1
投票

在vscode中按Ctrl + F启用正则表达式并将以下内容插入“查找”字段:

>\n\n(?!\n)

>\n

进入替换字段。现在选择全部替换。

这将导致您在原始问题中描述的结果。我用vscode 1.32.3测试了它


1
投票

编辑:

在看到Valdi_Boanswer之后,这似乎是一个非常好的解决方案。唯一的问题是,它在VS Code中无法正常工作。因此,为了使其在VS Code中工作,您必须更新到版本1.32并将正则表达式更改为:

(?<!^\n)^\n(?!\n$)

然后我得到了所需的结果,如下所示:https://regex101.com/r/b3Jnk2/1

上一个答案:

这个正则表达式为我做了。

^(\n)(?!\n{2})这是我得到的结果:

<nav>
    <ul>
        <li><a href="#">London</a></li>
        <li><a href="#">Paris</a></li>
        <li><a href="#">Tokyo</a></li>
    </ul>
</nav>

<div>new context</div>

<div>new context</div>

执行此操作后,您仍然需要删除几个空行而不是那些为上下文添加的空行,请使用此正则表达式:^(\n{2})

© www.soinside.com 2019 - 2024. All rights reserved.