如何使用Regex获得已定义字符串之前的第一个句子

2024-10-01 00:19:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一些清理工作,我想清理src元素的某个部分,但不知道如何使用regex。这里有什么能帮我的正则忍者吗?你知道吗

srcset="https://cimg.co/w/articles/1/5ca/f022bb06dc.png 150w, https://cimg.co/w/articles/2/5ca/f022bb06dc.png 300w, https://cimg.co/w/articles/3/5ca/f022bb06dc.png 600w, https://cimg.co/w/articles/4/5ca/f022bb06dc.png 1200w"

我希望第一个url在1200w之前。因此结果应该是:

https://cimg.co/w/articles/4/5ca/f022bb06dc.png

为什么我需要正则表达式,最后一个元素:

enter image description here

提前谢谢,周末愉快:)


Tags: httpssrcurl元素pngarticlesregexco
3条回答

您可以使用以下正则表达式:

^{}

不需要正则表达式。可以使用字符串方法splitpartition执行此操作:

In [181]: srcset = "https://cimg.co/w/articles/1/5ca/f022bb06dc.png 150w, https://cimg.co/w/articles/2/5ca/f022bb06dc.png 300w, https://cimg.co/w/articles/3/5ca/f022bb06dc.png 600w, https://cimg.co/w/arti
     ...: cles/4/5ca/f022bb06dc.png 1200w"                                                                                                                                                                  

In [182]: def get_url(srcset): 
     ...:     for str_ in srcset.split(','): 
     ...:         url, _, ext = str_.strip().partition(' ') 
     ...:         if ext == '1200w': 
     ...:             return url 
     ...:                                                                                                                                                                                                   

In [183]: get_url(srcset)                                                                                                                                                                                   
Out[183]: 'https://cimg.co/w/articles/4/5ca/f022bb06dc.png'

假设,不在url中。你知道吗


如果必须使用Regex,可以执行以下操作:

https?://\S+(?=\s+1200w\b)

所以:

In [184]: re.search(r'https?://\S+(?=\s+1200w\b)', srcset).group()                                                                                                                                          
Out[184]: 'https://cimg.co/w/articles/4/5ca/f022bb06dc.png'
  • https?://\S+与URL匹配
  • 零宽度的正向lookahead (?=\s+1200w\b),确保URL后面有一个或多个空格(\s+),然后是1200w

OTOH,如果您对基于HTTP方案的匹配不满意,可以匹配start或,,并获取第一个捕获的组:

In [185]: re.search(r'(?:^|,\s+)(\S+)\s+1200w\b', srcset).group(1)                                                                                                                                          
Out[185]: 'https://cimg.co/w/articles/4/5ca/f022bb06dc.png'

或:

a = 'srcset="https://cimg.co/w/articles/1/5ca/f022bb06dc.png 150w, https://cimg.co/w/articles/2/5ca/f022bb06dc.png 300w, https://cimg.co/w/articles/3/5ca/f022bb06dc.png 600w, https://cimg.co/w/articles/4/5ca/f022bb06dc.png 1200w"'

a = a.replace('srcset=', '').replace('"', '').split(',')
done = a[len(a)-1].strip().split(' ')[0]
print(done)

相关问题 更多 >