【问题标题】:Searching IP address from a CSV file从 CSV 文件中搜索 IP 地址
【发布时间】:2019-10-21 20:11:31
【问题描述】:

我有一个 CSV 文件,其中的列包含多个带有 IP 地址的字符串。我成功运行了正则表达式查询,但它在输出中添加了随机字符。

descr = df.loc[:, 'desc']

arr = []


pat = re.compile("(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)")

for i in descr:

     test = pat.findall(i)
     arr.append(test)

df["IPA"] = arr

它提供 IP 地址输出,但我希望输出为 10.35.50.4 等 [(10, 35, 50, 4)] 和 [(10, 35, 50, 3)]。

【问题讨论】:

  • 你能提供示例输入吗?
  • [131 / 0x0083] 源名称:Microsoft-Windows-RemoteDesktopServices-RdpCoreTS 字符串:['TCP' '10.35.50.4:62578'] 计算机名称:n-dag.com 记录号:26242 事件等级:4

标签: python regex pandas


【解决方案1】:

您需要将您的组(括号内的任何内容)转换为非捕获组。您可以通过在打开括号后立即添加“?:”来做到这一点。

pat = re.compile("(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)")

原因写在函数“findall”的定义上:

返回字符串中所有不重叠的模式匹配,作为字符串列表。从左到右扫描字符串,并按找到的顺序返回匹配项。 如果模式中存在一个或多个组,则返回组列表;如果模式有多个组,这将是一个元组列表。结果中包含空匹配项。

因此,它会分别返回您地址中的所有组和数字。

【讨论】:

  • 行得通。但是 [ 和 ] 仍然在输出中。我怎样才能删除它?
猜你喜欢
  • 2012-03-10
  • 1970-01-01
  • 2011-02-09
  • 2014-12-16
  • 2013-10-14
  • 2011-07-13
  • 1970-01-01
  • 2015-09-25
  • 1970-01-01
相关资源
最近更新 更多