对管道分隔字符串使用正则表达式模式匹配

问题描述

我正在尝试对 java 中的管道分隔字符串进行模式匹配。但不确定出了什么问题。需要专家的帮助。

A|Bill Access Key|CBEBALCOM|
D|215325775|20210507|9|BALCOM SYstemS LTD|||
I|1|Back of Duplex Page|

我有上述记录的文件,我想找到以“D”开头的记录并获取一个管道分隔值。并将它们存储在某个 POJO 对象中。

所以尝试首先通过应用模式读取值但无法找到匹配项。

String pattern = "r'D((?:\"(.*?)\"))'";

Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(line); 
if (m.find( )) { 
    System.out.println("value1" + m.group(0) ); 
    System.out.println("value2" + m.group(1) ); 
} else {
    System.out.println("No Match"); 
} 

解决方法

您可以这样尝试,而不是使用纯正则表达式解决方案

  • 流式传输文件的行
  • 过滤以 D| 开头的行
  • 从索引 2 开始拆分过滤后的行
  • 创建仅包含前两个值的新数组
  • 并收集到 List<String[]>
List<String[]> list = Files.lines(Path.of("Myfile.txt"))
.filter(str->str.startsWith("D|"))
.map(str->str.substring(2).split("\\|",3))
.map(arr->new String[]{arr[0],arr[1]})
.collect(Collectors.toList());

} catch (IOException ioe) {
    ioe.printStackTrace();
}