簡體   English   中英

正則表達式在 Notepad++ 中 Git 中的 Reverted Commit 中使用分隔符 `<<<<<<< HEAD` 和 `=======` 刪除行

[英]Regex Delete Lines with delimiter `<<<<<<< HEAD` and `=======` in Reverted Commit in Git in Notepad++

使用錯誤的正則表達式,我不小心刪除了許多我不應該刪除的行。 還原更改后(Git 版本控制的一個功能),我有 markdown 文件現在看起來像這樣:

<<<<<<< HEAD
There was a sentence here:
There was a third line here.
=======
There was a sentence here:
There was a second line here.
There was a third line here.
There were any number of lines here.
>>>>>>> parent of <commit ID> (<commit msg>)

我的要求是使用<<<<<<< HEAD=======作為分隔符並刪除分隔符之間的所有內容,包括分隔符。 之后我將分別刪除>>>>>>> parent of <commit ID> (<commit msg>)

我的正則表達式( .* )匹配分隔符之間的多行不成功。 我正在使用[{[(*"'!->1-9a-zA-ZÀ-ŰØ-űø-ÿ]+而不是簡單的w+來滿足我可能想要使用的任何換行符/單詞。我如果這對您很重要,請在每個句子后使用軟換行符(兩個空格)。(如果您可以匹配分隔符之間的所有內容,則可能無關緊要。)

預期結果:

There was a sentence here:
There was a second line here.
There was a third line here.
There were any number of lines here.
>>>>>>> parent of <commit ID> (<commit msg>)

正如我所說,之后我將處理>>>>>>> parent of <commit ID> (<commit msg>)
此外,不言而喻,定界符之間並不總是兩條線。 不同的行數會導致我的問題。

除了使用非貪婪匹配之外,您還可以在它們之間使用負前瞻匹配行,這些匹配行不僅包含=======更高效:

^<<<<<<< HEAD(?:\R(?!=======$).*)*+\R=======$

解釋

  • ^字符串開頭
  • <<<<<<< HEAD匹配字面意思
  • (?:非捕獲組
    • \R匹配任何 unicode 換行符
    • (?!=======$)負前瞻,斷言該行不是=======
    • .*匹配整行
  • )*+關閉非捕獲組並可選地使用所有格量詞重復它
  • \R匹配任何 unicode 換行符
  • =======字面匹配
  • $字符串結尾

正則表達式演示

在此處輸入圖像描述

在仔細閱讀 Wiktor 答案后

我設法找到了一個匹配:

<<<<<<<[\d\D]*?=======

? 在文檔中找到多個匹配項很重要。 否則,您可能會再次刪除更多內容。

暫無
暫無

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

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