我想查找我的文本文件中是否存在特定模式。
我正在使用以下课程:
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+"
任何人,Plz帮助我应该使用什么模式字符串????
答案 0 :(得分:10)
我不确定Scanner是最好的工具,因为hasNext(模式)检查下一个完整令牌是否具有下一个模式。你的模式会遇到令牌。
您是否尝试过使用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");
}
}
答案 1 :(得分:3)
此正则表达式适用:
\\s+\\w\\s+\\d+\\s+\\d+
matcher(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