在多行中查找任何值

时间:2018-09-13 09:25:09

标签: notepad++

我需要找到指定的多行文本,后跟任意值,并将该值替换为0。由于未知原因,我无法创建选择任何值的查询。 这是我编辑的文件:

befriend=
    {
        id="RUS"
        value=400
    }

通过查询befriend=\r\n\t\t{\r\n\t\t\tid="RUS"我可以找到它,但是不能更改为befriend=\r\n\t\t{\r\n\t\t\tid="RUS"r\n\t\t\tvalue=.*

可悲的是,我不知道以后如何替换该值,因为可以有不同数量的数字(例如:value = 0; value = 20; value = 200)

2 个答案:

答案 0 :(得分:1)

选项1:带有捕获组的正则表达式

选择“正则表达式”搜索模式。然后查询(befriend=\r\n\t\t{\r\n\t\t\tid="RUS"\r\n\t\t\tvalue=)[0-9]*,并在“替换为:”字段中填写\10

正则表达式中的括号会创建一个捕获组,该捕获组随后可以用\ 1引用(因为它是第一个,在这种情况下,仅是捕获组)。在替换字段中使用\ 1会导致整个部分与括号中的表达式匹配,从而再次被填充。不在捕获组中的正则表达式的匹配部分([0-9] *,任何连续的数字序列或空字符串)将被丢弃,并替换为您的“ 0”替换值。

选项2:带有后视的正则表达式

也许更优雅一些,使用(?<=befriend=\r\n\t\t{\r\n\t\t\tid="RUS"\r\n\t\t\tvalue=)[0-9]*,然后将替换值放在“替换为:”字段中。 (?<=...)是一个“向后看”,它将仅检查括号中的表达式在下一个表达式之前,而不将其存储为匹配项的一部分。

Lookbehinds的局限性在于它们通常不允许仅检查 any 正则表达式,但是对于这种情况下的字符串常量,就可以了。

答案 1 :(得分:1)

  • Ctrl + H
  • 查找内容:^befriend=\s+\{\s+id="RUS"\s+value=\K\d+
  • 替换为:New_value
  • 检查环绕
  • 检查正则表达式
  • 全部替换

说明:

^           : beginning of line
befriend=   : literally
\s+         : 1 or more any spaces (i.e. space, tabulation, linefeed, carriage return ...)
\{          : opening curly bracket
\s+         : 1 or more any spaces (i.e. space, tabulation, linefeed, carriage return ...)
id="RUS"    : literally
\s+         : 1 or more any spaces (i.e. space, tabulation, linefeed, carriage return ...)
value=      : literally
\K          : forget all we have seen until this position
\d+         : 1 or more digits

给定示例的结果

befriend=
    {
        id="RUS"
        value=New_value
    }