Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对管道分隔字符串使用正则表达式模式匹配_Java_Regex_Matcher - Fatal编程技术网

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

Java 对管道分隔字符串使用正则表达式模式匹配,java,regex,matcher,Java,Regex,Matcher,我试图在java中对管道分隔字符串进行模式匹配。但不确定出了什么问题。需要专家的帮助 A |账单访问密钥| CBEBALCOM| D | 215325775 | 20210507 | 9 | BALCOM系统有限公司||| I | 1 |双面打印页背面| 我有上面记录的文件,我想找到以“D”开头的记录,并获取下一个管道分隔值。并将其存储在某个POJO对象中 所以尝试通过应用模式首先读取值,但找不到匹配项 String pattern = "r'D((?:\"(.*?)\&q

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

A |账单访问密钥| CBEBALCOM|
D | 215325775 | 20210507 | 9 | BALCOM系统有限公司|||
I | 1 |双面打印页背面|
我有上面记录的文件,我想找到以“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 List=Files.line(Path.of(“Myfile.txt”))
.filter(str->str.startsWith(“D |”))
.map(str->str.substring(2).split(“\\\\”,3))
.map(arr->新字符串[]{arr[0],arr[1]})
.collect(Collectors.toList());
}捕获(ioe异常ioe){
ioe.printStackTrace();
}

您在这里期望的确切输出是什么?首先,从正则表达式中删除
r'
'
,因为它们不是正则表达式的一部分。它们是其他语言用来分隔正则表达式的字符。在Java中,正则表达式是字符串文本其次,由于您的数据没有双引号,请删除
来自正则表达式。--第三,问题是关于
|
分隔符的,但是正则表达式根本不检查
|
。那怎么行呢?--简言之,你的正则表达式远远偏离了你所声称的你想要的。退后一步,重新思考你在做什么。请检查。在那里,您可以验证正则表达式模式。
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();
}