gpt4 book ai didi

java - 使用正则表达式从文件中读取文本

转载 作者:行者123 更新时间:2023-12-02 01:23:50 29 4
gpt4 key购买 nike

我有一个文本文件,其中包含分为 3 列的数字和字符信息,但我无法弄清楚我需要什么正则表达式。列被 ; 断开。写入第三列后,它会跳到下一行并继续。我知道我的大部分代码都可以正常工作,并且我已将问题范围缩小到这部分代码。

我尝试查找 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

写入控制台时,它必须包含整行,而不仅仅是第三列。

最佳答案

^[^;]*;[^;]*;([^ ]*);$

仅当第三列不包含空格时才会匹配(因此它将匹配 "12345";"12";"tacobell@yahoo.com";,但不会匹配 "123456";"31";"Taco .bell@yahoo.com";)。

括号是捕获组,因此您可以通过从捕获结果中捕获组#1(而不是组#0)来提取该列。

开头的 ^ 表示该模式必须从行首开始,末尾的 $ 表示该模式必须结束于一行的末尾。如果您的输入不是这种情况,则必须进行调整。例如,如果最后一列后面有尾随空格,您可能会这样做:

^[^;]*;[^;]*;([^ ]*);[ ]*$

如果您有尾随空格并且最后一个分号是可选的,您会这样做:

^[^;]*;[^;]*;([^ ]*);?[ ]*$

最后一件事:我使用 [ ] 来指示空格,但这仅包括基本空格字符。它不包括制表符、换行符或任何其他类型的空格。如果您想包含所有这些,最好使用 \s,但在 Java 字符串语法中,您必须转义反斜杠,因此它看起来像这样:

Pattern.compile("^[^;]*;[^;]*;([^ ]*);?\\s*$")

这就是为什么精心设计的编程语言具有专门的正则表达式语法的原因。如果你想匹配文字反斜杠,那就更疯狂了:

Pattern.compile("\\\\")

在 Javascript 中,这只是:

/\\/

关于java - 使用正则表达式从文件中读取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57598776/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com