使用regexp-Python查找文本中的多个字符串

使用regexp-Python查找文本中的多个字符串,python,regex,parsing,Python,Regex,Parsing,我有以下字符串: background:url('http://images.bloomingdales.com/is/image/BLM/?&$b=BLM/swatches/&layer=0&size=322,23&src=is{$b$1/optimized/8757901_fpx.tif}&cropN=0,0,14,1&anchor=0,0&layer=1&size=23,23&src=is{$b$2/optimized/8757902_fpx.tif}&anchor=0,0&posN=0.

我有以下字符串:

background:url('http://images.bloomingdales.com/is/image/BLM/?&$b=BLM/swatches/&layer=0&size=322,23&src=is{$b$1/optimized/8757901_fpx.tif}&cropN=0,0,14,1&anchor=0,0&layer=1&size=23,23&src=is{$b$2/optimized/8757902_fpx.tif}&anchor=0,0&posN=0.071,0&layer=2&size=23,23&src=is{$b$4/optimized/8234544"fpx.tif}&2.23&src=0 0.7美元/7/优化/1111977年(U.fpx.tif}9.9.tif}9.1977年(U.fpx.tif}9.0 0 0.0&0.0&0 0.0&P N=0.0 0.0&P=0.0.0.0&P P P=0.0.0&P P=0 0 0.0&P=0.0 0&P P P=0.0 0&P P P=0 0 0 0 0 0 0 0 0.0 0&P P P=0 0 0&P P=0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0&posN N=0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0&posN N=0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0&posN N=0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3/optimized/1111973_fpx.tif}&10.23&src=是{$b$7/优化/125287/285.285.7/优化/125285.285.7.[fpx.tif}和锚=0.0&0.0&P=0.0&P=0.0&Pon=0.0.0和0.0.0&P=0.0&P=0.0&P=0.0&P=0&P=0&P=0&P=0&P=0&Pon=0&Pon=0&P=0&P=0&P=0.5.5.5.0&P=0&P=0&posN=0.5.5.0&P=0&P=0&posN=0&P=0.5.0&PoN=0.0&P=0&P=0.5.0&P=0&P=0&P=0.5.0&posN=0&P=0&P=0 0/optimized/8757900_fpx.tif}&2.23&src=0.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 P P P P P P P P 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 P P P P P P P P P P P N N 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 90,0&hei=23')
322px0透明

我需要得到所有这些部件:

1/optimized/8757901_fpx.tif
2/optimized/8757902_fpx.tif

我正在使用这个regexp:

re.findall(re.compile(r'\d{1,2}/optimized/.+\.tif'), swatch)
返回错误的结果:

['1/optimized/8757901_fpx.tif}&cropN=0,0,14,1&anchor=0,0&layer=1&size=23,23&src=is{$b$2/optimized/8757902_fpx.tif}&anchor=0,0&posN=0.071,0&layer=2&size=23,23&src=is{$b$4/optimized/8234544_fpx.tif}&anchor=0,0&posN=0.143,0&layer=3&size=23,23&src=is{$b$7/optimized/1111977_fpx.tif}&anchor=0,0&posN=0.214,0&layer=4&size=23,23&src=is{$b$0/optimized/8538460_fpx.tif}&anchor=0,0&posN=0.286,0&layer=5&size=23,23&src=is{$b$5/optimized/8234545_fpx.tif}&anchor=0,0&posN=0.357,0&layer=6&size=23,23&src=is{$b$3/optimized/1111973_fpx.tif}&anchor=0,0&posN=0.429,0&layer=7&size=23,23&src=is{$b$7/optimized/1252857_fpx.tif}&anchor=0,0&posN=0.5,0&layer=8&size=23,23&src=is{$b$8/optimized/1252858_fpx.tif}&anchor=0,0&posN=0.571,0&layer=9&size=23,23&src=is{$b$7/optimized/8234547_fpx.tif}&anchor=0,0&posN=0.643,0&layer=10&size=23,23&src=is{$b$0/optimized/8757900_fpx.tif}&anchor=0,0&posN=0.714,0&layer=11&size=23,23&src=is{$b$0/optimized/1111970_fpx.tif}&anchor=0,0&posN=0.786,0&layer=12&size=23,23&src=is{$b$1/optimized/1111971_fpx.tif}&anchor=0,0&posN=0.857,0&layer=13&size=23,23&src=is{$b$2/optimized/1111972_fpx.tif']
我已经在regex101.com上测试了这个regexp,它在那里运行良好:


附加到您的
量化对象上,使其成为非贪婪的。

在取消冻结模式下使用量词,而不是贪婪的
+
。 这样,您的正则表达式将永远不会在
/
.tif
之间匹配超过需要的字符,也就是说,它将只匹配到
的下一个实例。tif

您可以在正则表达式中使用a(注意,在您的模式中,您还需要在
+
之后放置一个
,以使其匹配):

由于所有图像路径都在
\$b\$
之后,所以可以使用以下模式:

{\$b\$(.*?)}
这将匹配
{}
\$b\$
之后的任何内容

>>> re.findall(re.compile(r'{\$b\$(.*?)}'), s)
['1/optimized/8757901_fpx.tif', '2/optimized/8757902_fpx.tif', 
'4/optimized/8234544_fpx.tif', '7/optimized/1111977_fpx.tif', 
'0/optimized/8538460_fpx.tif', '5/optimized/8234545_fpx.tif', 
'3/optimized/1111973_fpx.tif', '7/optimized/1252857_fpx.tif', 
'8/optimized/1252858_fpx.tif', '7/optimized/8234547_fpx.tif', 
'0/optimized/8757900_fpx.tif', '0/optimized/1111970_fpx.tif', 
'1/optimized/1111971_fpx.tif', '2/optimized/1111972_fpx.tif']
{\$b\$(.*?)}