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?:匹配httphttps
  • ://:匹配://
  • [^#\s]*:匹配0个或多个非#和空格
  • 的字符
  • #:匹配一个#