1

初学者,对 RegEx 和 Notepad++ 相对缺乏经验。我要做的是替换这两个防火墙会话中的策略编号以外的所有内容。请注意,我有一个 700 多行长的列表,所以我想一次性替换所有内容,只留下每行的保单编号。

id 1978781/s23,vsys 0,flag 00200440/4000/0003,policy 4332,time 5972, dip 0 module 0
id 1997645/s23,vsys 0,flag 00200440/4000/0003,policy 30562,time 6283, dip 0 module 0

有成千上万个不同的保单号码,所以简单的搜索是行不通的。

我希望我的线条在替换后看起来像这样。

4332
30562

在为这个问题尝试学习 RegEx 两个小时后,我意识到这比我预期的要复杂得多,我需要花时间学习它,因为它是一个非常强大的工具。这真的可以节省很多时间,不幸的是我现在没有。我期待更多地了解 RegEx,并感谢您能给我的任何帮助或指导。

4

2 回答 2

4

鉴于这些线条看起来总是一样的,您可以使用以下内容

^.+policy (\d+).+$

替换为:$1

点是通配符,因此.+表示在“策略”一词之前找到所有内容。然后找到一组数字(\d+用于查找数字)并保存它们(这就是括号在许多正则表达式引擎中的用途)。然后找到所有字符直到行尾。

^字符表示行首。表示行$尾。

于 2013-02-14T21:48:08.077 回答
3

您可以尝试以下方法:

寻找:

^.*policy ([0-9]+).*$

用。。。来代替:

\1

为什么这行得通?

点匹配任何字符,星表示它前面的字符的“零个或多个”。这意味着.*匹配一切

您想要的是匹配政策前后的所有内容并将其删除,并仅保留政策编号,因此在您的所有匹配器之间查找字符串“policy xxxxx”,其中 xxxxx 是数字。

正则表达式中用括号括起来的每个术语都将保存以用于替换。我在数字匹配器周围加上括号,[0-9]+然后将替换部分中匹配的内容与\1. 如果您的正则表达式包含多个带括号的部分,您可以使用\1, \2, \3...

正则表达式非常强大,您应该阅读有关它们的教程以了解它们可以提供什么。

于 2013-02-14T21:43:26.917 回答