我需要在 Notepad++ 中查找和替换方面的帮助。
例子:
$250 ‘Hello 1’ 拍‘____’
500 美元《Hello 2》拿下《____》
1000 美元《Hello 3》拿下《____》
想象一下,有数千个这样的条目到达‘Hello 9999’。
我想用数字替换“____”,而不改变“Hello 1”或“Hello 2”。
我希望的结果是:
250 美元的《Hello 1》
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+ :表示查找数字,末尾的“+”表示一个或多个(即必须至少有一个数字)。
.* :“.”表示任意字符,“*”表示一个或多个。
拿:来说,它只是特指文本这个词。
\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