记事本++正则表达式搜索失败
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)
全部替换:#
我尝试使用以下内容搜索一些文本并将其替换为其他以# 开头的文本。 在 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)
全部替换:#