【问题标题】:Regex to extract last two octets of IP address (3rd and 4th Octet) in Google Sheets正则表达式在 Google 表格中提取 IP 地址的最后两个八位字节(第 3 和第 4 个八位字节)
【发布时间】:2020-08-04 22:50:15
【问题描述】:

我需要帮助以使用正则表达式提取IP 地址的最后两个八位字节(第 3 和第 4 个八位字节)

此正则表达式可提取前两个八位字节(第一个和第二个八位字节)

(1?\d\d?|2[0-4]\d|25[0-5])

你可以试试here https://rubular.com/r/ynDa71Zd1M2f24

但我不知道如何提取第 3 和第 4 个八位字节。 有人可以帮我吗?

  • 输入:192.168.1.1 输出:192.168.0.0/16
  • 输入:192.168.2.1 输出:192.168.0.0/16
  • 输入:10.10.1.1 输出:10.10.0.0/16

谢谢,

【问题讨论】:

  • 你想匹配ip number吗?
  • 我认为你应该单独匹配每个八位字节并获取 3 和 4 的组
  • 嗨@Thefourthbird,我需要做的是在谷歌表中实现它,如下所示:docs.google.com/spreadsheets/d/…
  • @Faro 您可以使用regex101.com/r/zYZb1f/1 之类的模式,然后在替换中使用捕获组1,然后使用0.0/16
  • 谢谢@Thefourthbird

标签: regex


【解决方案1】:

您可以使用例如模式来匹配类似 ip 的格式,并为包括点在内的前 2 部分使用捕获组。

在替换中使用捕获组值$1,后跟0.0/16

=REGEXREPLACE(A2,"^(\d{1,3}\.\d{1,3}\.)\d{1,3}\.\d{1,3}$","$10.0/16")

查看regex demo

【讨论】:

  • 谢谢@Thefourthbird!此解决方案有效。真的很感激这个:)
  • 这不会捕获最后 2 个八位字节,而是捕获整个地址。
  • @NathanMcKaskle 请先阅读问题,然后再阅读答案,然后再开始投票。不,它不会捕获整个地址。它捕获第 1 组中的前 2 个部分,并将其余部分匹配为 0.0/16
  • 问题问如何提取最后两个。这将捕获整个地址。我向你保证确实如此。
【解决方案2】:

解决方案

你可以这样使用:

(?P<first>\d{2,3})\.(?P<second>\d{1,3})\.(?P<third>\d{1,3})\.(?P<fourth>\d{1,3})

或者,如果您没有命名捕获组支持,请使用:

(\d{2,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})

这会将您的字符串分成四个不同的组,每个组包含一个 ip 八位组。

示例

import re

pattern = r"(?P<first>\d{2,3})\.(?P<second>\d{1,3})\.(?P<third>\d{1,3})\.(?P<fourth>\d{1,3})\n?"
matcher = re.compile(pattern)

ips = """
192.168.1.1
192.168.1.2
"""

result = matcher.findall(ips) # [('192', '168', '1', '1'), ('192', '168', '1', '2')]

【讨论】:

  • 你在哪里看到他们想要 Python 解决方案?
  • @Toto 没关系,我提供了纯正则表达式,他们可以随意使用它。我确实提供了一个 python 示例以确保它清晰,但他们可以轻松地将其转换为任何其他语言。
  • \d{,3} 仅适用于 Python,在其他正则表达式风格中,它匹配一个数字后跟 {,3},请参阅:regex101.com/r/SmCJlg/1
  • 此外,最好在点上拆分,然后检查必须在 0 到 255 之间的每个值
  • @Toto “更好”是一个相对术语。 OP 要求提供一个正则表达式解决方案,所以我提供了一个,如果他只想以另一种方式获得八位位组,我会建议它。关于\d{,3},你是对的,我编辑了我的答案以包含所需的1\d{1,3}
猜你喜欢
  • 2023-01-05
  • 1970-01-01
  • 2018-12-01
  • 2021-08-15
  • 2020-10-17
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多