【发布时间】:2021-08-09 06:40:48
【问题描述】:
我正在尝试对 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");
}
【问题讨论】:
-
您期望的 exact 输出是什么?
-
首先,从正则表达式中删除
r'和',因为它们不是正则表达式的一部分。它们是其他语言用来分隔正则表达式的字符。在 Java 中,正则表达式是字符串文字。 --- 其次,由于您的数据没有双引号,请从正则表达式中删除"。 --- 第三,问题都与|分隔符有关,但正则表达式根本不检查|。那将如何运作? --- 简而言之,您的正则表达式与您声称想要的东西相去甚远。退后一步,重新思考你在做什么。 -
请查看regex101.com。在那里您可以验证正则表达式模式。