gpt4 book ai didi

java - 如何编写提取带选项卡的文本片段的正则表达式?

转载 作者:行者123 更新时间:2023-12-01 23:17:46 24 4
gpt4 key购买 nike

我一直在尝试创建一个程序来用空格替换制表符元素(假设一个制表符相当于8个空格,其中一个或多个空格由非空白字符(字母)占据。

我开始通过以下方式从扫描仪中提取文件中的文本:

try {
reader = new FileReader(file)
} catch (IOException io) {
println("File not found")
}
Scanner scanner = new Scanner(reader);
scanner.usedelimiter("//Z");
String text = Scanner.next();

然后我尝试解析以下面带有 ptrn1 的制表符结尾的文本片段,并使用 ptrn2 提取每个片段的最后一个单词的长度:

Pattern ptrn1 = Pattern.compile(".*\\t, Pattern.DOTALL);
Matcher matcher1 = ptrn1.matcher(text);
String nextPiece = matcher1.group();
println(matcher1.group()); /* gives me the first substring ending with tab*/

但是:

Pattern ptrn2 = Pattern.compile("\\s.*\\t"); /*supposed to capture the last word in the string*/
Matcher matcher2 = ptrn2.matcher(nextPiece);
String lastword = matcher2.group();

最后一行给了我一个错误,因为显然它无法与模式 ("\\s.\*\\t") 匹配任何内容。最后一个正则表达式有问题,它的意思是“任意数量的空格,后跟任意数量的字符,后跟制表符。不过,我无法找出它有什么问题。我有尝试了 ("\\s*.+\\t")("\\s*.*\\t")("\s+.+\\t");仍然没有运气。

后来,根据下面的建议,我简化了代码并在其中包含了示例字符串。如下:

       import acm.program.*;
import acm.util.*;
import java.util.*;
import java.io.*;
import java.util.regex.*;

public class Untabify extends ConsoleProgram {
public void run(){
String s = "Be plain,\tgood son,\tand homely\tin thy drift.\tRiddling\tconfession\tfinds but riddling\tshrift. ";
Pattern ptrn1 =Pattern.compile(".*?\t", Pattern.DOTALL);
Pattern ptrn2 = Pattern.compile("[^\\s+]\t", Pattern.DOTALL);

String nextPiece;

Matcher matcher1 = ptrn1.matcher(s);

while (matcher1.find()){
nextPiece = matcher1.group();
println(nextPiece);
Matcher matcher2 = ptrn2.matcher(nextPiece);
println(matcher2.group());

}
}
}

程序有时会崩溃,首先是在“println(matcher2.group())”处;并在下次运行“public void run()”时显示消息:“调试当前指令指针”(它的含义是什么?)。

最佳答案

查看示例字符串会很有用。如果您只想要制表符之前的最后一个单词,那么您可以使用:

([^\s]+)\t

请注意,() 是将最后一个单词放入组中。 [^\s]+ 表示 1 个或多个非空格。

关于java - 如何编写提取带选项卡的文本片段的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20960386/

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