Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
拆分字符串,但在Python中将分隔符保留在相同的结果子字符串中_Python_Regex_String - Fatal编程技术网

拆分字符串,但在Python中将分隔符保留在相同的结果子字符串中

拆分字符串,但在Python中将分隔符保留在相同的结果子字符串中,python,regex,string,Python,Regex,String,我有一个包含URL的字符串: string=https://www.link1.net/abc/cik?xai=En8MmT__aF_nQm-F48&;sig=Cg0A7_5AE&;urlfix=1&;;ccurl=https://aax-us.link-two.com/x/c/Qoj_sZnkA%2526adurl%253Dhttp%253A%252F%252Fwww.link-三个。mu%252F 我想提取所有这些数据,得到如下结果: ['https://www.link1

我有一个包含URL的字符串:

string=https://www.link1.net/abc/cik?xai=En8MmT__aF_nQm-F48&;sig=Cg0A7_5AE&;urlfix=1&;;ccurl=https://aax-us.link-two.com/x/c/Qoj_sZnkA%2526adurl%253Dhttp%253A%252F%252Fwww.link-三个。mu%252F

我想提取所有这些数据,得到如下结果:

['https://www.link1.net/abc/cik?xai=En8MmT__aF_nQm-F48&;sig=Cg0A7_5AE&;urlfix=1&;ccurl=','https://aax-us.link-two.com/x/c/Qoj_sZnkA%2526adurl%253D“,”http%253A%252F%252Fwww.link three.mu%252F']

我正在努力:

urls = [x for x in re.split('(http[s]?)', string) if x]
print urls 
结果是:

['https','://www.link1.net/abc/cik?xai=En8MmT\uu aF\u nQm-
F48&;sig=Cg0A7_5AE&;urlfix=1&;ccurl=','https','://aax us.link two.com/x/c/Qoj_sZnkA%2526durl%253D','http','%253A%252F%252fww.link three.mu%252F'.

如果URL可以以“http”或“https”开头,那么如何将完整的URL放在一起


有什么好主意吗?

你可以利用你的成绩参加两个连续的比赛,这样就行了

urls = [urls[i]+urls[i+1] for i in range(0,len(urls),2)]
但最好使用
findall
并对
https?
或字符串结尾进行前瞻:

import re

string = "https://www.link1.net/abc/cik?xai=En8MmT__aF_nQm-F48&sig=Cg0A7_5AE&urlfix=1&;ccurl=https://aax-us.link-two.com/x/c/Qoj_sZnkA%2526adurl%253Dhttp%253A%252F%252Fwww.link-three.mu%252F"

print(re.findall("https?.*?(?=https?|$)",string))
结果:

['https://www.link1.net/abc/cik?xai=En8MmT__aF_nQm-F48&sig=Cg0A7_5AE&urlfix=1&;ccurl=',
 'https://aax-us.link-two.com/x/c/Qoj_sZnkA%2526adurl%253D', 
 'http%253A%252F%252Fwww.link-three.mu%252F']

如注释中所述,由于您无法将
添加到分隔符中,因此无法确定URL分隔(如果URL在您的toast地址中包含
http

您可以使用您的结果并加入两个连续的匹配,这样就可以了

urls = [urls[i]+urls[i+1] for i in range(0,len(urls),2)]
但最好使用
findall
并对
https?
或字符串结尾进行前瞻:

import re

string = "https://www.link1.net/abc/cik?xai=En8MmT__aF_nQm-F48&sig=Cg0A7_5AE&urlfix=1&;ccurl=https://aax-us.link-two.com/x/c/Qoj_sZnkA%2526adurl%253Dhttp%253A%252F%252Fwww.link-three.mu%252F"

print(re.findall("https?.*?(?=https?|$)",string))
结果:

['https://www.link1.net/abc/cik?xai=En8MmT__aF_nQm-F48&sig=Cg0A7_5AE&urlfix=1&;ccurl=',
 'https://aax-us.link-two.com/x/c/Qoj_sZnkA%2526adurl%253D', 
 'http%253A%252F%252Fwww.link-three.mu%252F']

如注释中所述,由于无法将
添加到分隔符中,因此无法确定URL分隔(如果URL在您的地址中包含
http

而不使用
re
,您可以按如下方式处理此问题:

['http' + x for x in filter(lambda x: x, string.split('http'))]
结果将是:

['https://www.link1.net/abc/cik?xai=En8MmT__aF_nQm-
F48&sig=Cg0A7_5AE&urlfix=1&;ccurl=', 'https://aax-us.link-
two.com/x/c/Qoj_sZnkA%2526adurl%253D', 'http%253A%252F%252Fwww.link-
three.mu%252F']

不使用
re
,您可以按如下方式处理此问题:

['http' + x for x in filter(lambda x: x, string.split('http'))]
结果将是:

['https://www.link1.net/abc/cik?xai=En8MmT__aF_nQm-
F48&sig=Cg0A7_5AE&urlfix=1&;ccurl=', 'https://aax-us.link-
two.com/x/c/Qoj_sZnkA%2526adurl%253D', 'http%253A%252F%252Fwww.link-
three.mu%252F']

使用前瞻
(?=http)
。此外,无需将
s
放入一个集合
[s]
,因为默认情况下它是按字面解释的(它本身没有特殊含义)。此外,无需检查
s
,因为
http
是您真正需要查找的全部内容(想想看,如果
http
存在,谁会在乎
http
末尾是否有
s
,因为它已经满足了您的第一个要求)。您尝试匹配的URL是什么?它们在哪里结束?你认为从代码开始> http%253a < /代码>一个有效的URL吗?这是一个URL <代码>https://aax-us.link-two.com/x/c/Qoj_sZnkA%2526adurl%253Dhttp%253A%252F%252Fwww.link-3.mu%252F是的,你说得对,http是我真正需要的。因此,整个字符串来自URL重定向方案,在该方案中,我需要提取链中的所有URL。现在,我正在对URL进行解码,然后再拆分它们,以便所有URL都以http://.Use 前瞻
(?=http)
。此外,无需将
s
放入一个集合
[s]
,因为默认情况下它是按字面解释的(它本身没有特殊含义)。此外,无需检查
s
,因为
http
是您真正需要查找的全部内容(想想看,如果
http
存在,谁会在乎
http
末尾是否有
s
,因为它已经满足了您的第一个要求)。您尝试匹配的URL是什么?它们在哪里结束?你认为从代码开始> http%253a < /代码>一个有效的URL吗?这是一个URL <代码>https://aax-us.link-two.com/x/c/Qoj_sZnkA%2526adurl%253Dhttp%253A%252F%252Fwww.link-3.mu%252F是的,你说得对,http是我真正需要的。因此,整个字符串来自URL重定向方案,在该方案中,我需要提取链中的所有URL。现在,我正在对URL进行解码,然后再拆分它们,以便所有URL都以http://.I 相信字符串方法通常比
re
更快,因此这是一个比目前介绍的其他方法更好的解决方案。使用
filter(无,string.split('http'))
,它甚至更干净。除此之外,regexYes还有一个很好的替代品,速度确实更快!我相信字符串方法通常比
re
更快,因此这是一个比目前介绍的其他方法更好的解决方案。使用
filter(None,string.split('http'))
,它甚至更干净。除此之外,regexYes还有一个很好的替代品,速度确实更快!测试和工作良好,但字符串方法在我的大型项目中工作得更快。我在另一个问题上使用了这个方法,经过测试,效果很好,但是字符串方法在我的大型项目中工作得更快。我把这个用在了另一个问题上。