我想找出我的文本文件中是否存在特定模式。
我为此使用以下类:
java.util.regex.Pattern and java.util.Scanner;
我的示例文本行是
String Line="DBREF 1A1F A 102 190 UNP P08046 EGR1_MOUSE 308 396";
并且,我想匹配以下类型的模式:
A 102 190
其中,在 A 的位置 a-z 或 A-Z 但单包机。
在 102 的位置任意整数和任意长度。
在 190 的位置任意整数和任意长度。
并且,我的模式匹配代码是:
Scanner sr=new Scanner(Line);
Pattern p = Pattern.compile("\\s+([a-zA-Z]){1}\\s+\\d{1,}\\s+\\d{1,}\\s+");
while(sr.hasNext(p))
{
System.out.println("Pattern exists");
System.out.println("Matched String : "+sr.next(p));
}
但是, 模式不匹配,即使它存在..
我认为问题出在我的模式字符串上:
\\s+([a-zA-Z]){1}\\s+\\d{1,}\\s+\\d{1,}\\s+"
任何人,请帮助我我应该使用什么模式字符串????
最佳答案
我不确定 Scanner 是最好的工具,因为 hasNext(Pattern) 检查下一个 complete token 是否有下一个模式。您的模式跨越标记。
您是否尝试过使用 Matcher 对象而不是 Scanner?
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Foo2 {
public static void main(String[] args) {
String line = "DBREF 1A1F A 102 190 UNP P08046 EGR1_MOUSE 308 396";
Pattern p = Pattern.compile("\\s+[a-zA-Z]\\s+\\d{1,}\\s+\\d{1,}\\s+");
Matcher matcher = p.matcher(line);
while (matcher.find()) {
System.out.printf("group: %s%n", matcher.group());
}
System.out.println("done");
}
}
关于java - 如何使用扫描仪和模式类匹配文本中的模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4915967/