首页 > 解决方案 > Java:如果找不到正则表达式,请执行某些操作

问题描述

我正在解析日志文件,并且在找到正则表达式时需要做一件事(将',TRUE'添加到变量,.csv,ArrayList)和其他事情(添加一个空槽,“,”或“,_ " 如果空槽不好),当找不到该正则表达式时。

每个日志文件可以解析 1-~200 个条目 - 因此正则表达式可以匹配多次。

我尝试了几个选项,要么在编译时出错(不喜欢针对字符串测试布尔值),没有发生可观察的操作,或者当找到正则表达式时,我得到了找不到正则表达式时的结果。

我需要一个变量、.csv 或 ArrayList 中的输出,所以如果找不到匹配项,那么我需要一个空的“,”,因为输出是一个预定义的表,所以列需要正确对齐。

我试过的组合:

if(!noBaseText.equals("No matching base data found"))
if(!noBaseText.equals("No matching base data found") == false)
if(noBaseText.equals("No matching base data found" != true))
if(noBaseText.isEmpty())
if(noBaseText.equals(""))
if(!noBaseText.equals(""))
if(noBaseText.equals("No matching base data found"))

'} else {' 和 '} else if (...) {' 与上面的组合,无论是嵌套 if/else(如下面的代码)还是作为 'else' 到 'if (baseMatcher.find( ))' 返回相同的结果。

代码片段:

Pattern noBase = Pattern.compile("(?<noBase>No matching base data found)");
try(corrReader)
            {
                while ((corrLine = corrReader.readLine())!=null)
                {
                    corrText = corrLine.trim();
                    Matcher baseMatcher = noBase.matcher(corrText);
                    if (baseMatcher.find()) 
                    {
                        String noBaseText = baseMatcher.group("noBase");
                        if(!noBaseText.equals("No matching base data found"))
                        {
                            corrOutput += ",";
                        } else if(noBaseText.equals("No matching base data found")) {
                            corrOutput += ",TRUE";
                        } //end else
                    } //end if(baseMatcher)
                } //end while(corrLine)
            } //end try(corrReader)

匹配时我得到的输出:

AA-123-12345-SP1.SSF,真,

没有匹配时我得到的输出:

AA-123-12345-SP2.SSF,100,100,guug04314054.zip,

没有匹配时我需要得到的输出:

AA-123-12345-SP2.SSF,,100,100,guug04314054.zip,

当正则表达式匹配,并返回 ',TRUE' 时,将没有以下条目;当正则表达式不匹配并返回“,”时,将会有额外的条目。

标签: javaregex

解决方案


我不确定我是否正确,但是..如果您想检查模式是否为空,请执行以下操作:

if(noBase.pattern().isEmpty()) {
// do your stuff
}

推荐阅读