【问题标题】:pandas regex to extract network IP address substring熊猫正则表达式提取网络IP地址子字符串
【发布时间】:2017-07-18 23:03:08
【问题描述】:

如何使用正则表达式找到 ip 网络?

例子

IP 
234.523.213.462:321
21.236.432.123:66666
213.406.421.436:7324

我想要

IP                Port 
234.523.213.462   321
21.236.432.123    66666
213.406.421.436   7324

需要帮助! 谢谢。

【问题讨论】:

  • 顺便说一下,端口号不能是66666,端口号是1-65535范围内的整数。

标签: python regex pandas ip-address


【解决方案1】:

使用vectorize pandas方法str.split

df[['IP','Port']] = df.IP.str.split(':', expand=True)
print (df)
                IP   Port
0  234.523.213.462    321
1   21.236.432.123  66666
2  213.406.421.436   7324

使用正则表达式的解决方案(如果只有数字,:.):

df[['IP','Port']] = df.IP.str.extract('(.*):(.*)', expand=True)
print (df)
                IP   Port
0  234.523.213.462    321
1   21.236.432.123  66666
2  213.406.421.436   7324

【讨论】:

    【解决方案2】:

    正则表达式对于这个任务来说过于复杂了。

    In [1]: "213.406.421.436:7324".split(":")
    Out[1]: ['213.406.421.436', '7324']
    
    In [2]: "213.406.421.436:7324".split(":")[0]
    Out[2]: '213.406.421.436'
    
    In [3]: "213.406.421.436:7324".split(":")[1]
    Out[3]: '7324'
    

    您可以像这样从字符串中获取 ip 和端口:

    ip, port = "213.406.421.436:7324".split(":")
    

    【讨论】:

      【解决方案3】:

      使用pd.Series.str.extract

      简单的regex

      df.IP.str.extract('(?P<IP>.+):(?P<Port>\d+)', expand=True)
      
                  IP   Port
      0  523.213.462    321
      1  236.432.123  66666
      2  406.421.436   7324
      

      显式regex

      df.IP.str.extract('(?P<IP>\d{1,3}\.\d{1,3}\.\d{1,3}):(?P<Port>\d+)', expand=True)
      
                  IP   Port
      0  523.213.462    321
      1  236.432.123  66666
      2  406.421.436   7324
      

      【讨论】:

        猜你喜欢
        • 2018-08-28
        • 2015-12-17
        • 2015-09-19
        • 2019-06-16
        • 1970-01-01
        • 2022-11-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多