如何使用扫描仪和模式类匹配文本中的模式?

我想查找我的文本文件中是否存在特定模式。

即时通讯使用以下类:

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的位置az或AZ但是单个包机。

在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+" 

任何人,Plz帮助我应该使用什么模式字符串????

我不确定Scanner是最好的工具,因为hasNext(Pattern)检查下一个完整令牌是否具有下一个模式。 你的模式遍历令牌。

您是否尝试过使用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"); } } 

这个正则表达式的工作原理:

 \\s+\\w\\s+\\d+\\s+\\d+ 

匹配器的 group(0)p.matcher )给出A 102 190

[编辑]好的,我会给你一个完整的工作样本然后:

  Pattern p = Pattern.compile("\\s+\\w\\s+\\d+\\s+\\d+"); Matcher matcher = p.matcher("DBREF 1A1F A 102 190 UNP P08046 EGR1_MOUSE 308 396"); matcher.find(); System.out.println("Found match: " + matcher.group(0)); // Found match: A 102 190