美文网首页
记一次正则的使用

记一次正则的使用

作者: 阿班是小猿 | 来源:发表于2020-04-13 14:20 被阅读0次

最近项目中遇到了标签需求,标签分为 物品标签 和 案件标签,其拼接格式如下:

物品标签

格式:[id|物品标签1][id|物品标签2][id|物品标签3]

例子:[11|物品标签1][22|物品标签2][33|物品标签3]

案件标签

格式:[id|案件标签1|案件标识|备注][is|案件标签2|案件标识|备注][id|案件标签3|案件标识|备注]

例子:[01|虚假案件|true|是虚假案件][02|包装不合格|true|包装不合格][03|车辆事故案件|false|车辆事故]


现在遇到一个问题,拼接成这样很容易拼接,但是去查询标签,解析的时候,怎么方便的解析出来呢?

方案一

第一个想法映入脑海:先去掉最两边的 [ 和 ] ,然后根据 ][ 分隔字符串,然后遍历;然后根据 | 分隔,再遍历


String itemTagStr = "[11|物品标签1][22|物品标签2][33|物品标签3]";

    String replace = itemTagStr.substring(1, itemTagStr.length() - 1);

    String[] split = replace.split("]\\[");

    for (String tags : split) {

      String[] tag = tags.split("\\|");

      // 得到标签id

      Long id = Long.valueOf(tag[0]);

      // 得到标签名称

      String tagName = tag[1];

    }

案件标签和物品标签类似。

方案二

但是我仔细一想,不行呀,我堂堂小猿不能这么low哇,于是开始试着用其他方法:正则表达式首当其冲!

直接上代码:


String itemTagStr = "[11|物品标签1][22|物品标签2][33|物品标签3]";

    Pattern pattern = Pattern.compile("\\[(.*?)\\|(.*?)\\]");

    // 案件标签的正则  Pattern.compile("\\[(.*?)\\|(.*?)\\|(.*?)\\|(.*?)\\]"); 注意下itemTagStr中 | 的个数和正则中 | 的个数对应规律

    Matcher matcher = pattern.matcher(itemTagStr);

    while (matcher.find()) {

      // 得到标签id

      Long id = Long.valueOf(matcher.group(1));

      // 得到标签名称

      String itemName = matcher.group(2);

    }

  }

如果以上看不明白,看下图:

image

图中一行记录相当于一个matcher,matcher.find()方法就是用来遍历每个matcher,然后用group方法得到对应的值。

注意:如果不遍历直接从matcher获取的话会报错:


// 不遍历直接从matcher获取

String itemTagStr = "[11|物品标签1][22|物品标签2][33|物品标签3]";

    Pattern pattern = Pattern.compile("\\[(.*?)\\|(.*?)\\]");

    Matcher matcher = pattern.matcher(itemTagStr);

  // while (matcher.find()) {

      // 得到标签id

      Long id = Long.valueOf(matcher.group(1));

      // 得到标签名称

      String itemName = matcher.group(2);

// }

// 报错如下:

Exception in thread "main" java.lang.IllegalStateException: No match found

at java.util.regex.Matcher.group(Matcher.java:536)

(感谢郑同事的帮助😁)

相关文章

  • 记一次正则的使用

    最近项目中遇到了标签需求,标签分为 物品标签 和 案件标签,其拼接格式如下: 物品标签: 格式:[id|物品标签1...

  • 第七天正则表达式

    正则表达式的理念: 正则的使用方法: 正则里string两个方法: 使用正则找字母的几种写法: 正则的转义: 正则...

  • 正则-3{}限定符

    ^ : 开头 $ : 结尾 惰性:在使用正则的时候,如果正则可以匹配到规则,那么只要匹配到一次就直接返回。 限定符...

  • Golang 正则表达式

    参考golang之正则校验golang正则使用总结

  • 常用正则表达式记录

    正则表达式,如果不常用,经常用一次就忘掉了,需要再次学习,记录一些常用的正则表达式,以便使用时方便查看。正则只适合...

  • regexp 正则包

    正则对象 正则使用都是通过创建对应的正则对象,调用对象方法所实现。 新建正则对象 正则对象属性方法 正则方法 一般...

  • 如何获取字符串中的数字

    使用正则

  • 11.BeautifulSoup详解

    上一篇:8.Urllib库基本使用下一篇:10.正则表达式基础 正则表达式其实对很多人来说用起来是不方便的,需要记...

  • pandas正则

    filter filter使用正则过滤以“d”开头的列 select 除了使用filter的正则外,也可以使用se...

  • 我遇到一个毁灭性的问题 ·[正则 | RegExp]

    使用工具:sublime问题:使用正则替换某一部分1°正则: [ 2°原正则: [\s|\S]{0,1} 3°改进...

网友评论

      本文标题:记一次正则的使用

      本文链接:https://www.haomeiwen.com/subject/nxigmhtx.html