python - 如何从标记和第n次出现的另一个标记之间的python字符串中提取子字符串

标签 python regex string find slice

这是字符串:

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

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

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

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

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

最佳答案

您可以获取 @ 之后第一次出现的 /,而不是查找第三次出现的 /

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

关于python - 如何从标记和第n次出现的另一个标记之间的python字符串中提取子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57449459/

相关文章:

python - Scrapy - 在请求中更改用户代理的正确方法

regex - Perl 正则表达式跳过每一行

c++ - boost 从 regex_search 抛出的 regex error_stack 异常

R正则表达式从文本文件中提取电视节目名称

c++ - 索引和更复杂的方法

c - 需要澄清简单的 C 字符串初始化概念

python - 在 ipdb shell 中使用 IPython 魔术函数

python - 地址的正则表达式在 Regex 101 (Python) 中工作,而不是在 Python 中使用 re.match?

c - 在c中用变量格式化字符串

python - Hadoop:如何在 Python MapReduce 中包含第三方库