簡體   English   中英

RegEx查找並替換為記事本++

[英]RegEx find and replace with notepad++

我正在嘗試查找逗號,后跟空格以及包含和下划線的字符串,並用新行替換后跟匹配的字符串。

輸入

ABC, ZYZ John_Doe 
HBB Dan_Doe
HHH, BBB, CCC April_May 

所需的輸出

ABC John_Doe
ZYZ John_Doe
HBB Dan_Doe
HHH April_May
BBB April_May
CCC April_May

我使用的是Notepad ++和RegEx,可以通過在查找中將\\s+和替換中的\\n替換為逗號和空格,但也要匹配該行中包含下划線的字符串,並使其在換行后結束。

任何幫助深表感謝

當您有一個逗號時,此正則表達式將起作用

查找: ^([AZ]{3}), ([AZ]{3}) ([AZ][az].*)

替換為: \\1 \\3\\n\\2 \\3

這將使用兩個逗號

查找: ^([AZ]{3}), ([AZ]{3}), ([AZ]{3}) ([AZ][az].*)

替換為: \\1 \\4\\n\\2 \\4\\n\\3 \\4

請注意,這是否是最好的方法,但是我想出了以下模式: (?:(?:^|\\G(?!^)\\h*,\\h*)([[:alnum:]]+\\b)(?=(\\h*,\\h*[[:alnum:]]+)*\\h+([[:alnum:]]+_[[:alnum:]]+\\h*$))|(\\h+[[:alnum:]]+_[[:alnum:]]+\\h*$\\R?)) ,將其替換為(?{1}$1 $3\\n(?{2}~~:):) ,第二個替換為^~~並替換為空字符串。

它可以根據需要進行轉換,可以處理任意數量的逗號。 這是它的作用:

(?:^|\G(?!^)\h*,\h*)([[:alnum:]]+\b)(?=(\h*,\h*[[:alnum:]]+)*\h+([[:alnum:]]+_[[:alnum:]]+)\h*$)

這匹配以逗號分隔的字符串(以及前瞻中的下划線值)

  • (?:^|\\G(?!^)\\h*,\\h*)匹配行的開頭,或前一個匹配項后跟水平空格,用 逗號隔開 水平空格
  • ([[:alnum:]]+\\b)匹配字母/數字和單詞邊界,存儲到捕獲組1中
  • (?=開始前瞻,因此我們實際上並不匹配,只是斷言並存儲到捕獲組中
  • (\\h*,\\h*[[:alnum:]]+)*匹配下一個單詞,如果有后續單詞,則將最后一個存儲到捕獲組2中,如果沒有后續單詞,則捕獲組2不匹配
  • \\h+([[:alnum:]]+_[[:alnum:]]+)\\h*$匹配帶下划線的單詞,將其捕獲到第3組中,之前和之后可能有水平空格

(\\h+[[:alnum:]]+_[[:alnum:]]+\\h*$\\R?))

這與帶下划線的單詞以及以下可選的換行符匹配,因此我們可以將其替換為空字符串。

替換(?{1}$1 $3\\n(?{2}~~:):)檢查第一個捕獲組是否匹配(因此用逗號分隔的單詞之一)。 如果是這樣,它將在此單詞后面插入空格,下划線單詞,換行符,如果不是最后一個單詞,則插入~~ 我需要~~以使\\G在所有情況下都能正常工作,您可以使用不太可能在內容中再次出現的任何字符串。 如果第一個捕獲組不匹配,則替換將為空。 第二次用^~~替換最終被刪除。

使用下面的正則表達式N次,其中N是逗號的最大數在同一條直線:

, ([AZ]*)( \\w*)

用。。。來代替:

$2\\r\\n$1$2

這是一個有用的測試站點


例:

從您發布的輸入文本開始,您將不得不使用兩次正則表達式:

ABC, ZYZ John_Doe
HBB Dan_Doe
HHH, BBB, CCC April_May

這將是第一次執行的結果:

ABC John_Doe
ZYZ John_Doe
HBB Dan_Doe
HHH, BBB April_May
CCC April_May

這將是第二個結果:

ABC John_Doe
ZYZ John_Doe
HBB Dan_Doe
HHH April_May
BBB April_May
CCC April_May

暫無
暫無

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

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