如何用Regex匹配Amazon链接中dp/后的10位字母数字串(不含dp/)
解决方法:仅提取Amazon ASIN码(排除前缀
dp/) 你当前的正则会把前缀dp/也包含在匹配结果里,想要只拿到那10位字母数字的ASIN码,有两种实用的调整方式:
方法1:使用正向回顾后发断言(零宽断言)
这种方式可以让正则确认前面是dp/,但不会把这部分纳入最终的匹配结果:
(?<=dp/)[0-9A-Z]{10}
如果你想保留原来对ASIN开头的限制(仅数字或B),可以改成:
(?<=dp/)[0-9B][0-9A-Z]{9}
原理
(?<=dp/)是正向回顾后发断言,它会检查当前匹配位置的前面是否是dp/,但不会消耗这部分字符,所以后续的正则只会匹配你需要的10位码。
方法2:使用捕获组
如果你的正则工具/编程语言支持捕获组,可以把目标内容放在括号里,之后提取分组的内容:
dp/([0-9A-Z]{10})
同样,替换成你原来的规则就是:
dp/([0-9B][0-9A-Z]{9})
使用示例(Python)
import re url = "https://www.amazon.com/Tapps-Top-Apps-and-Games/dp/B00VU2BZRO/ref=sr_1_3?ie=UTF8&qid=1527813329&sr=8-3&keywords=poop" # 提取捕获组内容 match_result = re.search(r'dp/([0-9A-Z]{10})', url) if match_result: asin = match_result.group(1) print(asin) # 输出:B00VU2BZRO
这种方式下,整个正则的匹配结果还是dp/B00VU2BZRO,但你可以通过获取第1个捕获组(group(1))来得到纯ASIN码。
内容的提问来源于stack exchange,提问作者alexev31
相关产品推荐
相关产品推荐

