gpt4 book ai didi

python正则表达式获取字符串后的值

转载 作者:行者123 更新时间:2023-11-30 22:37:30 26 4
gpt4 key购买 nike

我正在尝试解析逗号分隔的字符串keyword://pass@ip:port。该字符串是逗号分隔的字符串,但密码可以包含包括逗号在内的任何字符。因此我不能使用基于逗号作为分隔符的分割操作。

我尝试使用正则表达式来获取“myserver://”之后的字符串,后来我可以通过使用字符串操作(pass@ip:port/key1)来分割其余信息,但我无法做到因为我无法获取上述关键字后面的信息。

myserver://是一个硬编码字符串,我需要获取每个 myserver 后面的内容作为逗号分隔列表(即 pass@ip:port/key1、pass2@ip2:port2/key2 等)

这是我能得到的最接近的:

import re  
my_servers="myserver://password,123@ip:port/key1,myserver://pass2@ip2:port2/key2"
result = re.search(r'myserver:\/\/(.*)[,(.*)|\s]', my_servers)

使用搜索,我尝试查找出现的“myserver://”关键字,后跟任何字符,并以逗号结尾(意味着后面将跟着 myserver://zzz,myserver://qqq)或空格(如果是单个 myserver://元素,但除了使用空格作为结束指示符之外,我不知道如何更好地做到这一点)。然而,结果并不正确。如何使用正则表达式更好地做到这一点?

最佳答案

如果您不需要在结果中保留myserver://,您可以考虑以下拆分方法:

filter(None, re.split(r'\s*,?\s*myserver://', s))

\s*,?\s*myserver:// 模式匹配可选的 ,(用 0+ 个空格括起来),然后是 myserver:// 子字符串。请参阅this regex demo 。请注意,我们需要删除空条目以消除空的前导条目,因为当在字符串开头找到匹配项时,开头的空字符串将被添加到结果列表中。

或者,您可以将基于前瞻的模式与惰性点匹配模式与 re.findall 结合使用:

rx = r"myserver://(.*?)(?=\s*,\s*myserver://|$)"

请参阅Python demo

详细信息:

  • myserver:// - 文字子字符串
  • (.*?) - 捕获组 1,其内容将由 re.findall 返回,匹配除换行符之外的任何 0+ 个字符,尽可能少,直到第一次出现(但排除它)
  • (?=\s*,\s*myserver://|$) - 两种选择之一:
    • \s*,\s*myserver:// - , 用 0+ 空格括起来,然后是文字 myserver://子串
    • | - 或
    • $ - 字符串结尾。

这是regex demo .

查看Python demo for the both approaches :

import re

s = "myserver://password,123@ip:port/key1,myserver://pass2@ip2:port2/key2"

rx1 = r'\s*,?\s*myserver://'
res1 = filter(None, re.split(rx1, s))
print(res1)

#or
rx2 = r"myserver://(.*?)(?=\s*,\s*myserver://|$)"
res2 = re.findall(rx2, s)
print(res2)

两者都会打印['password,123@ip:port/key1', 'pass2@ip2:port2/key2']

关于python正则表达式获取字符串后的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43869884/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com