[英]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+次,后跟非空格字符 )
仔細觀察 編輯:
在看到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.