试图把下面的线条
第1组:Ltm::.....
,直到文本行结束。
第2组:第1组之后的空白/CR/LF,直至第3组
第3组:Availability : available
或任何状态。
数据来源:
Ltm::Virtual Server: dmz.abc.com_443
Availability : available
Ltm::Virtual Server: dmztest.abc.com_80
Availability : unknown
Ltm::Virtual Server: dmztest.abc.com_443
Availability : available
Ltm::Virtual Server: lop.abc.com_80
Availability : unknown
Ltm::Virtual Server: lop.abc.com_443
Availability : available
我的搜索是这样的:
(Ltm::.*_.*\s)(\r\n|\N)(\s.*$)
我的替代品是(\1)(\3)
,它有效地(我认为)将消除我的第2组匹配的所有垃圾隐藏的CR/LF
3条答案
按热度按时间u3r8eeie1#
这实际上取决于你使用的编辑器。你说你使用这个正则表达式:
(Ltm::.*_.*\s)(\r\n|\N)(\s.*$)
但是当处理多行时,特殊的^和$仍然在每行的开始/结束处停止。
如果你想识别匹配字符串的开始和结束,你应该使用\A(字符串的开始)和\Z(字符串的结束)。
这将匹配列表中的一个示例
如果您搜索并将每个示例替换为\1\2\4\5,它将清除不可见的“垃圾”。
如果您怀疑其他地方有垃圾邮件,请将\s* 替换为(\s|\r|\n)* 以确保它也被删除。注意行尾之前的(\n)组,您需要保留此换行符,因为在多行中\s也匹配\n。
vaqhlq812#
我推荐这个模式:
说明:
(...)
-在捕获组中存储匹配的文本.*
-匹配零个或多个任意字符(除换行符外)\s*
-匹配零个或多个空格\r?
-匹配0或1个回车\n
-匹配换行符这里你可以选择匹配回车符,然后它可以同时匹配LF和CRLF。
最后,将其替换为第一和第二捕获组:
$1$2
Regex demo
编辑
正如AdrianHHH在注解中所建议的那样,在Notepad中,您可以使用
\R
匹配任何带或不带回车的换行符;请参阅Notepad用户手册。bbmckpt73#
您的示例数据每行后至少有2个“空格”,您的模式将有以下匹配:
(Ltm::.*_.*\s)
捕获组1,这部分匹配整行,由于\s
也可以匹配换行符,因此也会匹配换行符(\r\n|\N)
捕获组2,由于\N
匹配任何非换行符字符,因此此部分将匹配下一行的第一个空白字符(\s.*$)
捕获组3,此部分将匹配下一行的第二个空格,然后是该行的其余部分因此,如果替换为
\1\3
,则仍有在组1中捕获的换行符,而将省略的部分是\N
匹配的单个非换行符一个可能的解决方案可能是:
查找内容:
替换为:
或者,如果你想使用Notepad++在替换中保留括号,你必须转义它们:
图案吻合
^
字符串开头(\h*Ltm::.*_\d+)
捕获组1,匹配可选的前导水平空白字符,然后Ltm::
然后.*
将匹配行的其余部分,后面是最后一个出现的_
和1+数字\h*\R\h*
匹配任何由可选水平空格字符包围的Unicode换行符序列(\h.*\S)
捕获组2,匹配单个水平空白字符,行的其余部分,然后是最后一个非空白字符\h*
匹配可选的尾随水平空格字符请参见regex demo。