簡體   English   中英

IP 正則表達式,所有站點都沒有子網

[英]IP Regex without subnet for all sites

作為我公司項目的一部分,我需要從某些網站中提取不包括子網划分的 IP 地址(例如 196.82.1.12/24)。

如果地址包含子網划分,我不想抓住繼續進行子網划分但根本不采取它的部分。

例如在以下情況下:

<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>

所需的 output 將是:

212.179.35.154

201.139.97.126

請注意,有些行包含圍繞 IP 地址的引號,但是由於沒有以下 /NUMBER,因此它們是有效的。

我現在正在嘗試找到合適的正則表達式,例如:

(<td>(\d+\.){3}\d+<\/td>)
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}[^\/]

然而,所有這些似乎都存在缺陷。

提前致謝!

對我來說,它看起來像是負前瞻很有用的任務。 我會做:

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)

Output:

['212.179.35.154', '201.139.97.126']

通過使用負前瞻(?![0-9/])我們說:如果匹配項后面跟着0123456789/ ,則排除匹配項。 請注意,此處包含數字至關重要,因為如果您僅指定 / 匹配項之一將是:

200.139.97.12

(注意最后少了6

您可以通過使用模式語法(?....)來使用否定的前瞻斷言,如下所示:

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))

Output:

['212.179.35.154', '201.139.97.126']

(?!\d*\/)部分告訴它“如果后面跟着任何數字和正斜杠,則不匹配前一個模式”。
\d*部分是因為否則它將匹配200.139.97.12 200.139.97.126/24沒有6

小提示:您的原始模式將不僅僅匹配合法的 IP 地址,但我選擇了您的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM