![Notepad++/正規表示式尋找相同開頭、不同結尾的行](https://rvso.com/image/1304074/Notepad%2B%2B%2F%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%A4%BA%E5%BC%8F%E5%B0%8B%E6%89%BE%E7%9B%B8%E5%90%8C%E9%96%8B%E9%A0%AD%E3%80%81%E4%B8%8D%E5%90%8C%E7%B5%90%E5%B0%BE%E7%9A%84%E8%A1%8C.png)
所以,我讀了一點,發現 NotePad++ 不使用「正常」正規表示式(開始認為我會回到 SciTE),但這是我的問題:
我有一個導出的數據列表,其中包含一些冗餘數據,我正在嘗試清理這些數據並將其轉換為良好的CSV 以導入到地址簿中(遷移傳真伺服器解決方案,舊的解決方案太糟糕了,所以這是最好的我可以出口)。
我嘗試從每個條目組中刪除的行始終以
條目: 姓名 ~
然後是一個 12 位元字母數字(似乎是十六進位)代碼,它對於每個條目組都是唯一的。對於一些條目組,「NAME」後面有一個人類可讀的條目,但這些條目足夠少,我可以手動刪除它們,因此匹配它們並不是一件大事。
所以我想做的是找到以 Entry: 開頭的每一行,並選擇它一直到行尾。每個組中的每個條目都位於單獨的行上。然後我將使用“查找和替換”從列表中刪除這些行。
更新:輸入和輸出
Entry: NAME ~00003193820
ShortName: ~00003193820
Owner: USRENAME
Name: John
FamilyName: John
DearName: John
Organisation: Acme 1 Corp
Via: FAX-ANY 1(555) 123-4567
Entry: NAME ~00003193820
ShortName: ~00003193820
Owner: USRENAME
Name: Sam
FamilyName: Sam
DearName: Sam
Organisation: Acme 2 LLC
Via: FAX-ANY 1(555) 890-1234
這是兩個條目組。我想從每個群組中刪除以“Entry:”開頭的行。
答案1
另一個選擇是
^Entry: NAME .*
它將尋找以 開頭的行Entry: NAME
以及此後的任何內容。
答案2
使用
^Entry: NAME ~\d+$
因為搜尋模式似乎按要求工作。
我個人建議使用佔位符(匹配從到\d
範圍內的任何單個數字)而不是更通用的佔位符進行匹配。事實上,你甚至應該這樣做:0
9
.
^Entry: NAME ~\d{12}$
指定您期望的確切地連續 12 位數字。這樣,如果某個條目可能包含您沒有預料到的內容,您就不會意外地替換它。
如果字串採用十六進位表示法,您可以使用:
^Entry: NAME ~[0-9a-fA-F]{12}$
請注意,我沒有檢查最後兩個範例在 Notepad++ 中是否正常運作,但據我所知,這都是非常基本的語法。