2011-02-06 43 views
5

我想查找一個特定的模式是否存在於我的文本文件中。如何使用掃描儀和模式類匹配文本中的模式?

即時通訊使用下面的類此:

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幫我我應該使用什麼模式字符串?

回答

10

我不確定Scanner是否是最好的工具,因爲hasNext(模式)檢查以查看下一個完整標記是否具有下一個模式。你的模式通過令牌。

您是否嘗試過使用Matcher對象而不是掃描儀?

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"); 
    } 
} 
+0

仍然沒有工作。我認爲問題是與pattern.compile參數 – 2011-02-06 21:01:21

+0

他們的工作對我罰款。也許有點冗長,但他們應該工作。嘗試一下如上所示的小編譯測試程序。 – 2011-02-06 21:02:30

3

此正則表達式線工程:

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

group(0)matcherp.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