我试图获得一些亚马逊项目的ASIN。我发现一个模式:ASIN总是在“/ dp /”之后。如何从该字符串中提取ASIN(B003CP0V6S)? 我使用的红宝石什么是ruby正则表达式来获取此URL的特定部分?
url = "http://www.amazon.it/Calvin-Klein-Deluxe-K0S21120--Orologio/dp/B003CP0V6S/ref=lp_1597641031_1_8?ie=UTF8&qid=1349983393&sr=1-8"
我试图获得一些亚马逊项目的ASIN。我发现一个模式:ASIN总是在“/ dp /”之后。如何从该字符串中提取ASIN(B003CP0V6S)? 我使用的红宝石什么是ruby正则表达式来获取此URL的特定部分?
url = "http://www.amazon.it/Calvin-Klein-Deluxe-K0S21120--Orologio/dp/B003CP0V6S/ref=lp_1597641031_1_8?ie=UTF8&qid=1349983393&sr=1-8"
str = "http://www.amazon.it/Calvin-Klein-Deluxe-K0S21120--Orologio/dp/B003CP0V6S/ref=lp_1597641031_1_8?ie=UTF8&qid=1349983393&sr=1-8"
(match = str.match(/\/dp\/([^\/]*)/)) && match[1]
# => "B003CP0V6S"
我得到一个错误:str.match (/ \/dp \ /([^ \ /] *)/))&& match [1] SyntaxError:(irb):27:syntax error,unexpected')',expected $ end str.match/dp \ /([^ \ /] *)/))&& match [1] – framomo86
这是因为您在没有从开始处得到'(match =')的情况下剪切粘贴了代码。 –
有些人喜欢用URL使用编写Ruby正则表达式时使用的替代语法,因为斜杠字符全部逃逸妨碍可读性。在%r{}
中包含正则表达式可以让您避免未翻转的正斜杠。
str = "http://www.amazon.it/Calvin-Klein-Deluxe-K0S21120--Orologio/dp/B003CP0V6S/ref=lp_1597641031_1_8?ie=UTF8&qid=1349983393&sr=1-8"
(str =~ %r{/db/(.+?)/} && $1)
url.split("/dp/").last.split("/", 2).first
应该做的。
当我有这样的问题,我总是去http://www.rubular.com - 一个奇妙的小工具,让你调整正则表达式,并学习如何不同的选项工作 – Jim