Regex Notepad++ 删除除 IP 以外的所有内容

Regex Notepad++ Del all except IP

有一个文本文件,每行包含一个无用信息的IP地址。想删除IP周围无用的信息。

每一行看起来像:

%BER-1-887373: Group <Connect> User <gacan> IP <72.34.184.200> No IPv6 address available

只需要IP地址

IP 周围的< > 也需要删除。

感谢任何帮助

假设您没有任何其他由句点分隔并包含在 <...> 中的数字组,您可以找到:

.*<(\d{1,3}(?:\.\d{1,3}){3})>.*

并替换为


这不会验证 IP 地址;它只是在 <...> 内找到 4 组 1-3 个数字,并且组与组之间有句点。

鉴于您的示例文本,这将减少这一行

%BER-1-887373: Group <Connect> User <gacan> IP <72.34.184.200>

72.34.184.200.

Demo

解释:

  • .* - 匹配任意字符零次或多次(从行首到 <
  • < - 匹配文字字符 <
  • ( - 启动一个捕获组,以便我们可以在替换中使用它
    • \d{1,3} - 匹配 1 到 3 个数字
    • (?: - 启动一个非捕获组
      • \. - 匹配文字 .
      • \d{1,3} - 匹配 1-3 位数字
    • ) - 结束非捕获组
    • {3} - 重复非捕获组 3 次(给我们总共 4 组数字,中间有 3 个句点)
  • ) - 结束捕获组
  • > - 匹配文字 >
  • .* - 匹配任何字符零次或多次(该行的其余部分)

替换</code>意味着使用第一个捕获组(<code>()之间的部分),在本例中是IP地址。 ([=35=] 将是所有匹配的文本,在本例中是整行)。

查找替换:

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

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

正则表达式有时很复杂,您很可能会弄错。如果所有行都应该采用指定格式,即 IP 前三个词和 IP 后两个词,我会使用宏。 假设示例是:

abc xyz xxxx <127.23.32.120> xxx xyz
  1. 我会将光标移动到第一行的末尾。
  2. record marco 按钮(顶部的红色按钮)
  3. 按两次 Ctrl + Bksp。这将删除 xyz 和 xxx 字符。
  4. 按 Bksp 两次:这将删除 space 和 > 字符
  5. 按 Ctrl + 左箭头键 7 次。这会将光标移动到 IP
  6. 的开头
  7. 按 Ctrl + Bksp 4 次。这将删除其他无用的文本,并在第一行留下 IP。
  8. 按向下箭头,然后按 End 按钮移动到下一行的末尾
  9. 停止录制宏。
  10. 播放 marco 直到文件结束。