python re.sub 没有替换所有出现的字符串
python re.sub not replacing all the occurance of string
我没有得到想要的输出,re.sub 只是用 python 正则表达式替换了最后一次出现,请解释我做错了什么
srr = "http://www.google.com/#image-1CCCC| http://www.google.com/#image-1VVDD| http://www.google.com/#image-123| http://www.google.com/#image-123| http://www.google.com/#image-1CE005XG03"
re.sub("http://.*[#]", "", srr)
'image-1CE005XG03'
希望上面的字符串没有 http://www.google.com/#image 的输出。
image-1CCCC|image-1VVDD|image-123|image-1CE005XG03
我会在这里使用 re.findall
,而不是尝试进行替换以删除您不需要的部分:
src = "http://www.google.com/#image-1CCCC| http://www.google.com/#image-1VVDD| http://www.google.com/#image-123| http://www.google.com/#image-123| http://www.google.com/#image-1CE005XG03"
matches = re.findall(r'https?://www\.\S+#([^|\s]+)', src)
output = '|'.join(matches)
print(output) # image-1CCCC|image-1VVDD|image-123|image-123|image-1CE005XG03
请注意,如果您想要更具体并且只匹配 Google 个网址,您可以改用以下模式:
https?://www\.google\.\S+#([^|\s]+)
这是另一个解决方案,
"|".join(i.split("#")[-1] for i in srr.split("|"))
image-1CCCC|image-1VVDD|image-123|image-123|image-1CE005XG03
>>> "|".join(re.findall(r'#([^|\s]+)', srr))
'image-1CCCC|image-1VVDD|image-123|image-123|image-1CE005XG03'
按照上面评论中的建议,在 re.sub
中使用正确的正则表达式:
import re
srr = "http://www.google.com/#image-1CCCC| http://www.google.com/#image-1VVDD| http://www.google.com/#image-123| http://www.google.com/#image-123| http://www.google.com/#image-1CE005XG03"
print (re.sub(r"\s*https?://[^#\s]*#", "", srr))
输出:
image-1CCCC|image-1VVDD|image-123|image-123|image-1CE005XG03
正则表达式详细信息:
\s*
:匹配0个或多个空格
https?
:匹配http
或https
://
:匹配://
[^#\s]*
:匹配0个或多个非#
和空格 的字符
#
:匹配一个#
我没有得到想要的输出,re.sub 只是用 python 正则表达式替换了最后一次出现,请解释我做错了什么
srr = "http://www.google.com/#image-1CCCC| http://www.google.com/#image-1VVDD| http://www.google.com/#image-123| http://www.google.com/#image-123| http://www.google.com/#image-1CE005XG03"
re.sub("http://.*[#]", "", srr)
'image-1CE005XG03'
希望上面的字符串没有 http://www.google.com/#image 的输出。
image-1CCCC|image-1VVDD|image-123|image-1CE005XG03
我会在这里使用 re.findall
,而不是尝试进行替换以删除您不需要的部分:
src = "http://www.google.com/#image-1CCCC| http://www.google.com/#image-1VVDD| http://www.google.com/#image-123| http://www.google.com/#image-123| http://www.google.com/#image-1CE005XG03"
matches = re.findall(r'https?://www\.\S+#([^|\s]+)', src)
output = '|'.join(matches)
print(output) # image-1CCCC|image-1VVDD|image-123|image-123|image-1CE005XG03
请注意,如果您想要更具体并且只匹配 Google 个网址,您可以改用以下模式:
https?://www\.google\.\S+#([^|\s]+)
这是另一个解决方案,
"|".join(i.split("#")[-1] for i in srr.split("|"))
image-1CCCC|image-1VVDD|image-123|image-123|image-1CE005XG03
>>> "|".join(re.findall(r'#([^|\s]+)', srr))
'image-1CCCC|image-1VVDD|image-123|image-123|image-1CE005XG03'
按照上面评论中的建议,在 re.sub
中使用正确的正则表达式:
import re
srr = "http://www.google.com/#image-1CCCC| http://www.google.com/#image-1VVDD| http://www.google.com/#image-123| http://www.google.com/#image-123| http://www.google.com/#image-1CE005XG03"
print (re.sub(r"\s*https?://[^#\s]*#", "", srr))
输出:
image-1CCCC|image-1VVDD|image-123|image-123|image-1CE005XG03
正则表达式详细信息:
\s*
:匹配0个或多个空格https?
:匹配http
或https
://
:匹配://
[^#\s]*
:匹配0个或多个非#
和空格 的字符
#
:匹配一个#