
我需要有關在 Notepad++ 中尋找和替換的協助。
例子:
$250 '你好 1' 取 '____'
$500 'Hello 2' 取 '____'
$1000 'Hello 3' 取 '____'
想像一下,有數千個這樣的條目,直到「Hello 9999」。
我想用數字替換“____”而不更改“Hello 1”或“Hello 2”。
我希望結果是:
$250 “你好 1”採取“250”
$500 “你好 2” 拿“500”
$1000 'Hello 3' 拿'1000'
我該怎麼做呢?我希望使用正規表示式。
答案1
勾選正規表示式複選框並使用:
搜尋:
\$(.*?) (.*?) Take '(.*?)'
代替:
\$$1 $2 Take '$1'
這將搜尋基本上如下所示的行:
$anything anything Take 'anything'
.*?表示在正規表示式中除換行符之外的任何字元。
將括號括在捕獲組(例如 .*)周圍?會將其內容儲存在變數 $n 中,其中 n 是第 n 組。
因此,搜尋之後我們將得到三個變數:
$1 = 250 $2 = 'Hello 1' $3 = ___
透過替換,我們用 \$ 替換實際的整行(轉義美元符號使其成為文字 $ 而不是變數)。
整行被替換為 $$1 $2 '$1'
如您所見,我們再次使用 $1 變量,它是第一個捕獲組。
我對 SO 很陌生,如果我的解釋不是那麼好,我很抱歉。
答案2
這應該是 Notepad++ 語法,選擇了「尋找/取代」對話方塊底部的「正規表示式」單選按鈕:
Find: (\$(\d+).*Take\s+').*(')
Replace: \1\2\3
解釋:
括號依照從左到右的順序將變數分組:
(\$(\d+).*Take\s+').*(')
|--------1--------|
|-2-| |3|
\$ :表示查找美元符號
\d+ :表示找出數字,結尾的「+」表示一個或多個(即必須至少是一位數字)。
.*:“。”表示任意字符,“*”表示一個或多個。
Take : 只是具體的字 Text。
\s+ :表示空格字符,「+」表示一個或多個。
…
現在,因為除了單引號中的最後一個字元之外的所有內容都已分組,所以:
\1\2\3
只需放入第一個和第三個括號,將第二個括號放在中間(其中第二個括號是美元價值)。
答案3
嘗試這個
首先開啟正規表示式
https://regex101.com/r/aW4gG2/2
尋找:(\$\d+)(.*Take ')(.*)(')
取代:\1\2\1\4
捕獲
此表達式有四組
輸入:$250 'Hello 1' Take '____'
第 1 組
(\$d+)
= $250
- 這表示以 $ (轉義為文字)開始,然後是數字 ( \d
) 1 或更多,因此無論是3 還是15,它都會停在最後一位數字處。的開頭,但我沒有假使,假設。但是,如果他們確實開始生產線,那麼您可能需要添加一個^
製作它^(\Sd+)
第2組
(.*Take ')
= 'Hello 1' Take '
- 表達式表示.*
任何字元任意次數,因此它會採取一切直到它看到Take
,然後它會採取Take '
因為我寫出來並停在那裡。
第3組
(.*)
= -____
這基本上佔用了內部空間,它佔用了任何東西0次或多次。在這種情況下,它都是下劃線,但寫入它會抓住你在那裡的所有內容。它會抓住所有內容到行尾,除了我後面有一些東西告訴它何時停止
第4組
(')
= -'
這告訴第 3 組在標記處停止'
。它還會捕捉'
自己群組中的標記以進行重新排列。
代換
\1\2\1\4
組從左括號開始編號,但在這種情況下,一切都是線性的,沒有嵌套,因此非常明顯。\1\2\3\4
會讓一切保持原樣。但我們想用第一組替換第三組,所以......\1\2\1\4
就可以了。這裡的關鍵點之一是確保我們捕獲第四組並在最後替換它。除此之外沒有什麼太棘手的。
執行
因此,只需在查找替換中進行設置,然後點擊全部替換即可解決問題。
編輯
我注意到您想刪除替換中的 $,因此您需要對我最初的建議進行一些細微的更改,儘管它基本上是相同的。
輸入:$250 'Hello 1' Take '____'
尋找:(\$)(\d+)(.*Take ')(.*)(')
取代:\1\2\3\2\5