正则group分组提取关键信息

需求

      有个excel导入需求,有一列信息是   5<值域范围<8这种的表达式,需要解析成表达式(5,8)

值域范围<18,解析成(,18), 1<=值域范围<=5,解析成[1,5]       简单粗暴的方式可能是用

<、<=、>、>=号切割字符串,然后进行字符切割。

 实现

下面用正则的分组,实现这个功能

正则表达式: ([^<=<]*)(<=|<)*值域范围(<=|<)*(.*)

group(0) 匹配完整的正则表达式,group(1)匹配第一个括号内的表达是。

 ([^<=<]*)(<=|<)*值域范围(<=|<)*(.*) 的意思:第一个括号匹配非<=和<的值,以3<值域范围<5为例子,

group(1)=3,group(2)= <,group(3)=<,group(4)=5

public class test {

    public static void main(String[] args) {
        String val ="'2024-01-05 08:00:00'<=值域范围<='2024-01-05 09:00:00'";
        tranfBds(val);
    }

    public static String tranfBds(String  val){
        String newval = "";
        //val ="<=值域范围<=4";
        val = val.trim().replace("\r", "").replace("\n", "");
        String pattern = "([^<=<]*)(<=|<)*值域范围(<=|<)*(.*)";
        if (!val.matches(pattern)) {
            System.out.println("不匹配val");
        }else {
            Pattern p = Pattern.compile(pattern);
            Matcher m = p.matcher(val);
            if (m.find())
            {
                String leftdata =  m.group(1);
                String leftfh = transfh("left", m.group(2));
                String rightfh = transfh("right", m.group(3));
                String rightdata =   m.group(4);
                newval  = leftfh + leftdata + ","+ rightdata+ rightfh;
                System.out.println(newval);
            }

        }
        return newval;
    }

/**
 * 符号转换
 * @param sx
 * @param fh
 * @return
 */
    /**
     * 符号转换
     * @param sx
     * @param fh
     * @return
     */
    public static String transfh(String sx, String fh){
        if (StringUtils.isNotEmpty(fh)){
            if (fh.equalsIgnoreCase("<")){
                if (sx.equalsIgnoreCase("left"))
                    return "(";
                else
                    return ")";
            }else if (fh.equalsIgnoreCase("<=")){
                if (sx.equalsIgnoreCase("left"))
                    return "[";
                else
                    return "]";
            }
        }else {
            if (sx.equalsIgnoreCase("left"))
                return "(";
            else
                return ")";
        }
        return  "";
    }


}

相关推荐

  1. group分组提取关键信息

    2024-02-02 18:24:02       52 阅读
  2. C#表达式,提取信息使用

    2024-02-02 18:24:02       32 阅读
  3. Python:表达式之re.group()用法

    2024-02-02 18:24:02       53 阅读
  4. Python 使用提取字符串

    2024-02-02 18:24:02       22 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-02 18:24:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-02 18:24:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-02 18:24:02       87 阅读
  4. Python语言-面向对象

    2024-02-02 18:24:02       96 阅读

热门阅读

  1. 什么是线程安全,你了解吗?

    2024-02-02 18:24:02       60 阅读
  2. Spring全局异常处理

    2024-02-02 18:24:02       61 阅读
  3. 洛谷P2670扫雷游戏

    2024-02-02 18:24:02       58 阅读
  4. 数据可视化:让数据“活”起来

    2024-02-02 18:24:02       53 阅读
  5. 用 Footprint 的交易类型标签揭秘链上交易

    2024-02-02 18:24:02       50 阅读
  6. postgresql lc_ctype不同值之间的转换

    2024-02-02 18:24:02       54 阅读
  7. LeetCode2092. Find All People With Secret——并查集

    2024-02-02 18:24:02       46 阅读
  8. SQL Server 函数参考手册(SQL Server 高级函数)

    2024-02-02 18:24:02       47 阅读
  9. 有三种方法可以实现忽略Git中不想提交的文件:

    2024-02-02 18:24:02       44 阅读
  10. 腾讯面试题

    2024-02-02 18:24:02       39 阅读
  11. 虚拟机 网络模式

    2024-02-02 18:24:02       45 阅读