Java Regex/Pattern/Matcher如何识别和存储所有不匹配?
来自CSV文件验证程序的代码片段:
我已经创建了^{
接下来,我想确定是否存在匹配,哪个字段不匹配并导致错误
最好的方法是什么
Pattern bodyPattern = Pattern.compile("([0-9]{11}),([A-Z0-9]{7}),([0-9]{7,8}),([0-9]{1}\\W[0-9]{2}E\\W[0-9]{2}),([0-9]{7,8}),([A-Z]{5}),([A-Z]{8,25}),(\\d+\\.\\d{0,2}),([0-9]{3})");
Matcher matcher = bodyPattern.matcher(line);
if(matcher.matches()) {
System.out.println("SUCCESS: Body validation was successful");
} else {
System.out.println("ERROR: Body validation failed in line " + lineNumber);
}
当前的输出是这样的
我想说的是,在令牌编号x处失败,但不确定如何做到这一点
Line # 1, Token #1, Token: 20171006003
Line # 1, Token #2, Token: OUTWARD
Line # 1, Token #3, Token: 1000004
Line # 1, Token #4, Token: 2.00E+36
Line # 1, Token #5, Token: 1000005
Line # 1, Token #6, Token: FALSE
Line # 1, Token #7, Token: ACCEPTED
Line # 1, Token #8, Token: 400
Line # 1, Token #9, Token: 826
ERROR: Body validation failed in line 1
ERROR: Body validation failed in token number
# 1 楼答案
使用java api,似乎无法在匹配失败后检索信息。在一般情况下,正则表达式可以回溯,最终状态可能没有用处,但在这种特殊情况下,通过反射检查Matcher可能会很有趣:
输出是
第一次匹配成功,并设置了组区域
aaabbcccc
aaa
bb
cccc
第二次匹配失败仅组0包含匹配的子序列区域
aaab
inaaab bcccc
对于您的特定情况,可以为每个字段定义一个Regexp,并使用
,
拆分字符串