有一个文本文件,每行包含一个无用信息的IP地址。想要删除IP周围无用的信息。
每一行看起来像:
PDFsharp
仅需要IP地址
< >围绕IP并需要删除它们。
任何帮助表示赞赏
答案 0 :(得分:1)
假设您没有按句号分隔的任何其他数字组并包含在<...>
中,您可以找到:
.*<(\d{1,3}(?:\.\d{1,3}){3})>.*
并替换为
$1
这不验证IP地址;它只在<...>
内找到4组1-3个数字,并且在组之间有句点。
根据您的示例文本,这会减少此行
%BER-1-887373: Group <Connect> User <gacan> IP <72.34.184.200>
只是72.34.184.200
。
.*
- 匹配任何字符零次或多次(从行的开头到<
的任何内容)<
- 匹配文字字符<
(
- 启动一个捕获组,以便我们可以在替换中使用它
\d{1,3}
- 匹配1到3位数字(?:
- 启动非捕获组
\.
- 匹配文字.
\d{1,3}
- 匹配1-3位数字)
- 结束非捕获组{3}
- 重复非捕获组3次(总共给出4组数字,其间有3个句点))
- 结束捕获组>
- 匹配文字>
.*
- 匹配任何字符零次或多次(行的其余部分)替换$1
表示使用第一个捕获组((
和)
之间的部分),在这种情况下是IP地址。 ($0
将是所有匹配的文本,在这种情况下是整行。
答案 1 :(得分:1)
找一个替换:
.*?(\d{1,3}((.\d{1,3}){3})).*
\1
模式并不完美,因为它不限制有效数字的范围(例如,999.999.999.99也会匹配)。
答案 2 :(得分:0)
正则表达式往往很复杂,很有可能你弄错了。如果所有的行都应该是指定的格式,即IP之前的三个单词和后面的两个单词,我会使用宏。 假设这个例子是:
abc xyz xxxx <127.23.32.120> xxx xyz
record marco
按钮(顶部的红色按钮)>
字符End
按钮移动到下一行的末尾