使用正则提取字符串中URL等信息

2021-06-04 04:04

阅读:508

标签:break   des   取图   hit   ace   parent   sign   round   box   

一、说明

背景:最近在做同步京东商品信息时遇到一个问题,同步后的商品详情无法在富文本中修改,强制修改会导致图片无法正常显示,研究发现详情中的图片是在css的作为背景图指定的。

解决:经过多次尝试,最后使用自定义HTML标签模板,提取css样式中background-image:url的图片地址和尺寸,并替换到自定义的模板中

技术:Java语言、正则表达式

二、代码

public static void main(String[] args) {
        StringBuilder stringBuilder = new StringBuilder();
        //商品详情
        String goodsDesc = "
\\n
\\n
    \\n
  • \\n \\n
    \\n
    \\n \\\"印尼进口\\n
    \\n
    \\n

    \\n 印尼进口 Tango威化饼干 进口威化饼干 零食礼盒 零食大礼包 潘多拉礼盒684g\\n

    \\n
    \\n
    \\n \\n
  • \\n
  • \\n \\n
    \\n
    \\n \\\"印尼进口\\n
    \\n
    \\n

    \\n 印尼进口 Tango威化饼干 休闲零食 饼干 咔芙尔焦糖威化饼干73.5g\\n

    \\n
    \\n
    \\n \\n
  • \\n
  • \\n \\n
    \\n
    \\n \\\"印尼进口\\n
    \\n
    \\n

    \\n 印尼进口 Tango威化饼干 休闲零食 乳酪夹心威化饼干160g\\n

    \\n
    \\n
    \\n \\n
  • \\n
  • \\n \\n
    \\n
    \\n \\\"印尼进口\\n
    \\n
    \\n

    \\n 印尼进口 Tango威化饼干 休闲零食 巧克力夹心威化饼干125g\\n

    \\n
    \\n
    \\n \\n
  • \\n
  • \\n \\n
    \\n
    \\n \\\"印尼进口\\n
    \\n
    \\n

    \\n 印尼进口 Tango威化饼干 休闲零食 巧克力咔咔脆组合装320g(160g*2盒)\\n

    \\n
    \\n
    \\n \\n
  • \\n
  • \\n \\n
    \\n
    \\n \\\"印尼进口\\n
    \\n
    \\n

    \\n 印尼进口 Tango威化饼干 休闲零食 咔咔脆威化饼干 泡泡糖味80g/盒\\n

    \\n
    \\n
    \\n \\n
  • \\n
  • \\n \\n
    \\n
    \\n \\\"印尼进口\\n
    \\n
    \\n

    \\n 印尼进口 Tango威化饼干 休闲零食 咔咔脆威化饼干 牛奶味160g\\n

    \\n
    \\n
    \\n \\n
  • \\n
  • \\n \\n
    \\n
    \\n \\\"印尼进口\\n
    \\n
    \\n

    \\n 印尼进口 Tango威化饼干 休闲零食 咔咔脆威化饼干 草莓味80g/盒\\n

    \\n
    \\n
    \\n \\n
  • \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n\\n
\\n \\n"; //商品详情模板 String goodsDescTemplate = "

"; //定义提取图片URL和height值的正则表达式,提取的字段用group的()语法 Pattern pattern = Pattern.compile("background-image:url\\((https?://.*)\\).*height:(\\d+)"); //研究原串后,先以尺寸进行分组 String[] split = goodsDesc.split("px}"); for (String s : split) { if (s.contains("background-image:url")){ //过去掉不含背景图片的数据 Matcher matcher = pattern.matcher(s); //指定匹配器 while (matcher.find()){ //进行查找,并判断是否匹配 System.out.println("匹配到的字符串:"+ matcher.group()); System.out.println("提取的图片地址:"+ matcher.group(1)); System.out.println("提取的height值:"+ matcher.group(2)); stringBuilder.append(String.format(goodsDescTemplate, matcher.group(1), matcher.group(2))); } } } System.out.println("拼接的字符串:"+ stringBuilder); }

 三、打印日志

匹配到的字符串:background-image:url(http://img30.360buyimg.com/sku/jfs/t1/31717/2/4671/349535/5c7f4f07E899abe1e/9dd81eaf2aac0863.jpg); height:1083
提取的图片地址:http://img30.360buyimg.com/sku/jfs/t1/31717/2/4671/349535/5c7f4f07E899abe1e/9dd81eaf2aac0863.jpg
提取的height值:1083
匹配到的字符串:background-image:url(http://img30.360buyimg.com/sku/jfs/t1/14459/14/9500/215997/5c7f4f06E886e02de/9de0bdce8ff65b3c.jpg); height:786
提取的图片地址:http://img30.360buyimg.com/sku/jfs/t1/14459/14/9500/215997/5c7f4f06E886e02de/9de0bdce8ff65b3c.jpg
提取的height值:786
匹配到的字符串:background-image:url(http://img30.360buyimg.com/sku/jfs/t1/25970/3/9647/494996/5c7f4f07E79829fc4/41a47699929ca408.jpg); height:1416
提取的图片地址:http://img30.360buyimg.com/sku/jfs/t1/25970/3/9647/494996/5c7f4f07E79829fc4/41a47699929ca408.jpg
提取的height值:1416
匹配到的字符串:background-image:url(http://img30.360buyimg.com/sku/jfs/t1/79600/29/3390/325766/5d196888Ee80899ac/6b260d5e4eab426d.jpg); height:1020
提取的图片地址:http://img30.360buyimg.com/sku/jfs/t1/79600/29/3390/325766/5d196888Ee80899ac/6b260d5e4eab426d.jpg
提取的height值:1020
拼接的字符串:

 

使用正则提取字符串中URL等信息

标签:break   des   取图   hit   ace   parent   sign   round   box   

原文地址:https://www.cnblogs.com/wslook/p/12344488.html


评论


亲,登录后才可以留言!