首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >所有站点都没有子网的IP Regex

所有站点都没有子网的IP Regex
EN

Stack Overflow用户
提问于 2020-07-28 09:18:29
回答 2查看 42关注 0票数 1

作为我公司项目的一部分,我需要从一些网站提取不包括子网(例如196.82.1.12/24)的IP地址。

如果地址包含子网,我不想抓住进行子网的部分,但根本不接受它。

例如,在以下情况下:

代码语言:javascript
复制
<td>212.179.35.154</td>
<td>200.139.97.126/24</td>
<td>"201.139.97.126"</td>
<td>F5 BIG-IP</td>
<td>unknown</td>
<td class="date">26-Feb-2011</td>

预期的产出将是:

212.179.35.154

201.139.97.126

请注意,一些行包含围绕IP地址的引号,但是由于没有后续的/NUMBER,它们是有效的。

现在,我正试图找到一个合适的正则表达式,例如:

代码语言:javascript
复制
(<td>(\d+\.){3}\d+<\/td>)
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}[^\/]

然而,它们的内部似乎都有缺陷。

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-28 09:29:05

您可以使用,通过使用模式语法(?!...),如下所示:

代码语言:javascript
复制
import re

s = """
<td>212.179.35.154</td>
<td>200.139.97.126/24</td>
<td>"201.139.97.126"</td>
<td>F5 BIG-IP</td>
<td>unknown</td>
<td class="date">26-Feb-2011</td>
"""

pattern = r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(?!\d*\/)"

print(re.findall(pattern,s))

输出:

代码语言:javascript
复制
['212.179.35.154', '201.139.97.126']

(?!\d*\/)部分告诉它“如果后面跟着任何数字和正斜杠,就不匹配前面的模式”。

( \d*部分是因为否则它将在200.139.97.126/24之外匹配200.139.97.12 (没有6) )

注意:你的原始模式将不仅仅是合法的IP地址匹配,但我同意你的方式。

票数 1
EN

Stack Overflow用户

发布于 2020-07-28 09:29:49

对我来说,这似乎是一项负展望的任务。我会这样做:

代码语言:javascript
复制
import re
txt = '''<td>212.179.35.154</td>
<td>200.139.97.126/24</td>
<td>"201.139.97.126"</td>
<td>F5 BIG-IP</td>
<td>unknown</td>
<td class="date">26-Feb-2011</td>'''
pattern = r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(?![0-9/])"
found = re.findall(pattern, txt)
print(found)

输出:

代码语言:javascript
复制
['212.179.35.154', '201.139.97.126']

通过使用负前瞻性(?![0-9/]),我们说:排除匹配,如果它们后面跟着0123456789/。请注意,在这里包含数字非常重要,因为如果只指定/一个匹配项,则如下所示:

代码语言:javascript
复制
200.139.97.12

(最后请注意缺少6 )

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63130866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档