【问题标题】:How to extract a substring from a string in python between a marker and the nth occurrence of another marker如何从标记和另一个标记的第n次出现之间的python中的字符串中提取子字符串
【发布时间】:2019-08-11 11:09:26
【问题描述】:

这是字符串:

IP = "http://username:password@192.168.0.66/mjpg/video.mjpg"

我想提取@ 和第三个/ 之间的IP 地址,以将其作为参数传递给函数。这是文本文件中数百行中的一行,我必须循环提取 IP 地址。

以下代码不起作用,我不知道为什么。如果我将 / 替换为 /mjpg 并删除 (3) 它将起作用,但 / 之后的视频流并不总是 mjpg 并且可能是我正在处理的脚本中的数百个之一。点是提取“@”和第三个“/”之间的子字符串。

print(IP[IP.find("@")+1:IP.find(("/"),3)])

有人能发现错误或提出更好的方法吗?

【问题讨论】:

    标签: python regex string find slice


    【解决方案1】:

    您可以在@ 之后找到/ 的第一次出现,而不是找到第三次出现的/

    >>> start = IP.find("@")
    >>> end   = IP.find("/", start)
    >>> IP[start+1:end]
    '192.168.0.66'
    

    话虽如此,使用re.findall 更容易做到这一点

    >>> import re
    >>> re.findall(r'http:.*?//[^@]*@([0-9.]+)/', IP)
    ['192.168.0.66']
    

    【讨论】:

    • 谢谢苏尼莎。它确实有效。知道为什么我的代码行会产生空行!
    • 在您的代码中,您希望IP.find(("/"),3)] 返回什么? str.find 的第二个参数是起始位置。所以它只是在第三个字符之后返回第一个 / 的位置
    猜你喜欢
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 2014-07-10
    • 2015-11-16
    相关资源
    最近更新 更多