记事本++正则表达式搜索失败

notepad++ regular expression search failed

我尝试使用以下内容搜索一些文本并将其替换为其他以# 开头的文本。 在 regex101 上它工作正常但 NotePad++ 说搜索失败。 还尝试在 \n 之前添加 \r 但没有帮助。

正则表达式:(class boy(?:.*\n)+\s*)(Height.*;\n)((?:.*\n)+})

要搜索的文本:

class boy Mike
{
Age = 20;
PhoneNum = 658965;
Height = 198;
City = LA
}
note boy Joe
{
Age = 21;
PhoneNum = 558565;
Height = 178;
City = BA
}

class boy Joe
{
Age = 21;
PhoneNum = 558565;
Height = 178;
City = BA
}

替补: #

输出:

class boy Mike
{
Age = 20;
PhoneNum = 658965;
#Height = 198;
City = LA
}
note boy Joe
{
Age = 21;
PhoneNum = 558565;
Height = 178;
City = BA
}

class boy Joe
{
Age = 21;
PhoneNum = 558565;
#Height = 178;
City = BA
}

您可以使用

查找内容^class boy.*(?:\R(?!}$).*)*\R\K(?=Height)
替换为#
. 匹配换行符: DISABLED

详情:

  • ^ - 行首
  • class boy - class boy 然后尽可能少的任何零个或多个字符
  • .* - 行的其余部分
  • (?:\R(?!}$).*)* - 到文件末尾或等于 }
  • 的零行或多行
  • \R - 换行序列
  • \K - 省略匹配的文本
  • (?=Height) - 紧靠右边,必须有Height.

我已经重写了你的正则表达式所以它不使用 newline:

(?<=class boy \w+\s*\{[^}]+?)(Height[^;]+;)(?=[\s\S]+?\})

使用“global”和“multiline”选项。

替换为:

#

解释:

(?<=class boy \w+\s*\{[^}]+?) 在后面查找:class boy,一个 space 和一个或多个单词字符后跟一个或多个白色 space(包括换行符)。然后寻找 { 后跟一个或多个不是 }.

的字符

(Height[^;]+;) 匹配 'Heigth' 后跟一个或多个不是 ; 的字符 - 将匹配放在第 1 组中。

(?=[\s\S]+?\}) 期待后面跟着 }.

的任何字符

替换为 # 和第 1 组。

另一种选择...

查找;^(class[\s\S]+?)(height)

全部替换:#