尝试转换此示例
Some Nice Article on amazon https://www.amazon.de/gp/product/ADKLHJADK/ref=as_li_ss_tl?ie=UTF8&pd_rd_i=B01J7LLL9Q&pd_rd_r=a8c7bb4b-49da-11e8-ad28-014ae5dc2f42&pd_rd_w=9QOk2&pd_rd_wg=zc1s7&pf_rd_m=A3JWKAKR8XB7XF&pf_rd_s=&pf_rd_r=VF3C7MDNZ741H8S13AYV&pf_rd_t=36701&pf_rd_p=1c175abe-9bc7-490b-bbe1-2caf7e752c98&pf_rd_i=desktop&linkCode=ll1
到这个
https://www.amazon.de/gp/product/YXZ91ALI91/
使用正则表达式在java中处理此问题的正确或最佳方法是什么? 因为我的选择看起来很脏...
https://www.amazon.de/gp/product/[A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9]/
获取亚马逊链接的工作解决方案:
第一部分直到|适用于每个桌面复制和粘贴,以及使用移动应用程序的共享按钮复制后的所有内容。
https://www.amazon.de/gp/product/ [^ /] + / | HTTPS:?//www.amazon.de/dp/ [^ /] + /
答案 0 :(得分:3)
你的正则表达式将如下所示:
https:\/\/www.amazon.de\/gp\/product\/[^\/]+\/?
[^\/]
表示"一切不会削减"
您可以在此处进行测试:https://regex101.com/r/wwFmMw/1
答案 1 :(得分:1)
有很多方法。这种方法可以假设它是产品之后的部分。
Pattern pat = Pattern.compile("^.*(https://.*/product/[^\\/]*?/).*");
示例:
public static void main(String[] args)
{
String inp = "Some Nice Article on amazon "
+ "https://www.amazon.de/gp/product/ADKLHJADK/ref=as_li_ss_tl"
+ "?ie=UTF8&pd_rd_i=B01J7LLL9Q&pd_rd_r"
+ "=a8c7bb4b-49da-11e8-ad28-014ae5dc2f42&pd_rd_w"
+ "=9QOk2&pd_rd_wg=zc1s7&pf_rd_m=A3JWKAKR8XB7XF&pf_rd_s=&pf_rd_r"
+ "=VF3C7MDNZ741H8S13AYV&pf_rd_t="
+ "36701&pf_rd_p=1c175abe-9bc7-490b-bbe1-2caf7e752c98&pf_rd_i"
+ "=desktop&linkCode=ll1";
Pattern pat = Pattern.compile("^.*(https://.*/product/[^\\/]*?/).*");
Matcher m = pat.matcher(inp);
if (m.matches() && m.groupCount() > 0) {
System.out.println(m.group(1));
}
}
我的想法是找到" https:"的开头,然后找到任何东西,然后"产品/",然后找到任何东西直到下一个" /&# 34。
结果输出:
答案 2 :(得分:0)
一线解决方案:
String result = myStrValue.replaceAll('.*(https://www\.amazon\.de/gp/product/\w+/).*', '$1');
。
\ w +表示至少一个单词字符:[a-zA-Z_0-9]
在这里试试java正则表达式:https://www.freeformatter.com/java-regex-tester.html#ad-output