捕獲

捕獲

我需要有關在 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

嘗試這個

首先開啟正規表示式

Notepad++ 設定以開啟正規表示式

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

相關內容