簡體   English   中英

如何在Visual Studio代碼中替換文檔中的每一個換行符,而不是每兩個換行符(或更多)?

[英]How can I replace in Visual Studio Code every one newline in a document, but not every two newlines (or more)?

我通過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>

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

這可以找到一個空白行

查找: (\\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

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

這將匹配

  • ^字符串的開始
  • (捕獲組
    • [ \\t]*\\S.*\\n匹配空格或制表符的0+次,然后是非空格字符,然后匹配,直到字符串的結尾和換行符
  • )關閉組
  • [ \\t]*$\\n匹配空行或僅匹配空格或制表符
  • (?=正向前瞻,斷言如下
    • [ \\t]*\\S)匹配空格或制表符的0+次,后跟非空格字符
  • )仔細觀察

正則表達式演示

嘗試這樣的事情:

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

使用gm選項並替換為空字符串。

有關工作示例,請參閱https://regex101.com/r/uEpQ0L/1

編輯:

在看到Valdi_Bo回答之后,這似乎是一個非常好的解決方案。 唯一的問題是,它在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})

在vscode中按Ctrl + F啟用正則表達式並將以下內容插入“ 查找”字段:

>\n\n(?!\n)

>\n

進入替換字段。 現在選擇全部替換

這將導致您在原始問題中描述的結果。 我用vscode 1.32.3測試了它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM