如何用Python正则表达式提取URL编码串中ProductId与Colour值拼接结果
问题原因分析
你原来使用的正则(?:ProductId%3D|Colour%3D)(.*)中,.*属于贪婪匹配规则,会匹配从匹配位置到字符串末尾的所有内容。所以首次匹配到ProductId%3D之后,剩下的整段967164%26Colour%3Dbright-royal都会被捕获,自然无法得到两个独立的参数值。
正确正则写法
你可以通过限制值的匹配范围来实现需求,推荐两种常用写法:
- 写法1:限制值不含
%字符(URL编码的特殊符号均以%开头,参数值本身不会包含未编码的%)
正则:r'(?:ProductId%3D|Colour%3D)([^%]+)' - 写法2:用正向预查限定值的终止位置为参数分隔符
%26或字符串结尾
正则:r'(?:ProductId%3D|Colour%3D)(.*?)(?=%26|$)'
完整实现代码
import re string = "ProductId%3D967164%26Colour%3Dbright-royal" # 替换为上面任意一种正则均可 matches = re.findall(r'(?:ProductId%3D|Colour%3D)([^%]+)', string) result = ''.join(matches) print(result) # 输出:967164bright-royal
内容的提问来源于stack exchange,提问作者VDN
相关产品推荐
相关产品推荐

