正则表达式Notepad++删除除IP地址外的所有内容

3
有一个文本文件,每行包含一个带有无用信息的IP地址。想要删除IP周围的无用信息。
每行看起来像:
%BER-1-887373: Group <Connect> User <gacan> IP <72.34.184.200> No IPv6 address available

仅需要 IP 地址。
尖括号(< >)包围着 IP 地址,也需要将其删除。
感谢任何帮助。

3
你能分享一些这些行的例子吗? - Duniyadnd
这是其中一行的样本,当然不是实际的IP.. %BER-1-887373: 组<Connect> 用户<gacan> IP <72.34.184.200>没有可用的IPv6地址。 - planejane
@planejane,你能否更新你的问题并附上这个示例行。如果只在评论中出现,可能会被忽略掉。 - KKishore
3个回答

1

进行查找替换:

  • 查找内容:.*?(\d{1,3}((.\d{1,3}){3})).*
  • 替换为:\1
  • 选择正则表达式
  • 点击“全部替换”

该模式并不完美,因为它没有限制有效数字的范围(例如,999.999.999.99也会被匹配)。


非常感谢您的帮助,但是这个操作删除了所有内容,只留下了1-887373。 - planejane
你在左下角选择了“正则表达式”并且取消勾选了“. 匹配换行符”吗? - Lars Fischer
我确实没有勾选它。 - planejane

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>

仅需将IP地址更改为 72.34.184.200

演示

解释:

  • .* - 匹配任意字符零次或多次(从行首到 <
  • < - 匹配字面字符 <
  • ( - 开始一个捕获组,以便我们可以在替换中使用它
    • \d{1,3} - 匹配 1-3 个数字
    • (?: - 开始一个非捕获组
      • \. - 匹配一个字面的 .
      • \d{1,3} - 匹配 1-3 个数字
    • ) - 结束非捕获组
    • {3} - 重复非捕获组 3 次(总共有 4 组数字,在它们之间有 3 个句点)
  • ) - 结束捕获组
  • > - 匹配字面的 >
  • .* - 匹配任意字符零次或多次(行的其余部分)
替换符号$1 表示使用第一个捕获组(在()之间的部分),在本例中即为IP地址。($0表示所有匹配的文本,这里是整行)。

你能帮我理解一下解决方案中每个字符的作用吗?为了学习目的。 - planejane

0
正则表达式有时候会很复杂,而且很可能会出错。如果所有行都应该按照指定格式,即IP之前三个单词和之后两个单词,我会使用宏。 假设示例为:
abc xyz xxxx <127.23.32.120> xxx xyz
  1. 我会将光标移动到第一行的末尾。
  2. 按下“录制宏”按钮(位于顶部的红色按钮)
  3. 按两次Ctrl + Bksp。这将删除xyz和xxx字符。
  4. 按两次Bksp:这将删除空格和“>”字符
  5. 按7次Ctrl +左箭头。这将把光标移到IP的开头
  6. 按4次Ctrl + Bksp。这将删除其他无用的文本,只留下第一行中的IP。
  7. 按向下箭头,然后按“End”按钮,以移动到下一行的末尾
  8. 停止录制宏。
  9. 播放宏,直到文件结束。

很好的想法,但是如果每行长度不完全相同,这种方法就行不通了。换句话说,有些行比其他行多了一些无用信息。非常感谢,我学会了如何使用宏! - planejane

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接