我有一个文本文件,其中包含具有数字和字符的信息,这些信息分为三列,我无法弄清楚我需要什么正则表达式。列被破;在写入第三列之后,它会跳到下一行并继续。我知道我的大多数代码都可以正常工作,并且我已将问题缩小到此部分代码。
我尝试查找Java正则表达式,但似乎找不到要完成的工作。
while ((line = br.readLine()) != null) {
// Searches the file that matches a specific value
if (!line.isEmpty() || line.matches("Need regular expression here that skips over the two columns and reads the last")) {
if (isValid(line)) {
System.out.println(line + "IS Valid");
} else {
System.out.println(line + "IS NOT VALID");
}
}
}
在控制台中,读取文件后应显示
"12345";"12";"tacobell@yahoo.com"; IS valid
"123456";"31";"Taco . bell@yahoo.com"; IS NOT VALID
写到控制台时,它必须包含整行,而不仅仅是第三列。
答案 0 :(得分:0)
^[^;]*;[^;]*;([^ ]*);$
仅当第三列不包含空格时,它才会为您提供匹配项(因此它将匹配"12345";"12";"tacobell@yahoo.com";
,但不会匹配"123456";"31";"Taco . bell@yahoo.com";
)。
括号是捕获组,因此您可以通过从捕获结果中获取组1(而非组0)来提取该列。
开头的^
表示此模式必须从一行的开头开始,而结尾的$
则意味着该模式必须在一行的结尾处结束。如果输入的内容不是这种情况,则必须进行调整。例如,如果您在最后一列之后有空白,则可以这样做:
^[^;]*;[^;]*;([^ ]*);[ ]*$
如果尾随空格且最后一个分号是可选的,则可以这样做:
^[^;]*;[^;]*;([^ ]*);?[ ]*$
最后一件事:我使用[ ]
来表示空格,但这仅包括基本空格字符。它不包括制表符,换行符或任何其他类型的空格。如果要包含所有这些内容,最好使用\s
,但是在Java字符串语法中,您必须转义反斜杠,因此它看起来像这样:
Pattern.compile("^[^;]*;[^;]*;([^ ]*);?\\s*$")
这就是为什么精心设计的编程语言具有特殊的正则表达式语法的原因。如果要匹配文字反斜杠,它会变得更加疯狂:
Pattern.compile("\\\\")
在Javascript中,它就是:
/\\/