2012-01-13 75 views
2

在Java中需要一些正則表達式幫助。我有一個字符串,其中包含文本,並且始終是日期之後的日期。然後在日期之後,沒有空格,新的文本開始並以日期結束。等等等等。我需要使用循環將所有文本實例取出。它需要排除從一開始的日期和期末日期。任何人都可以提出一個好的正則表達式嗎?Java正則表達式排除開始日期和結束日期

String candidateString = "dffsd fs sfd 12.12.12asd saddsa dasd 12.12.12fsadf sdfsdf sdf 10.10.10"; 
Pattern p2 = Pattern.compile(".*?(?![0-9][0-9].[0-9][0-9].[0-9][0-9])[a-zA-Z] (?=[0-9][0-9].[0-9][0-9].[0-9][0-9])"); 
Matcher matcher2 = p2.matcher(candidateString); 
while (matcher2.find()) { 
    System.out.println(matcher2.group()); 
} 

此代碼需要在最後的日期,但我不知道如何從一開始就排除日期。

+0

你的字符串可以包含日期嗎? :) – adarshr 2012-01-13 11:51:20

+0

不太可能。他們實際上是書名。但是,如果正則表達式會留下這個機會,這將是非常棒的:) – test 2012-01-13 11:53:24

回答

3

看看這是你想要的嗎?

String candidateString = 
     "Microsoft Visual FoxPro 6.0 language reference 13.02.12"; 
     //"dffsd fs sfd 12.12.12asd saddsa dasd 12.12.12fsadf sdfsdf sdf 10.10.10"; 

    Pattern p2 = 
     Pattern 
      .compile("(.*?(?![0-9][0-9]\\.[0-9][0-9]\\.[0-9][0-9])) ([0-9][0-9]\\.[0-9][0-9]\\.[0-9][0-9])"); 

    Matcher matcher2 = p2.matcher(candidateString); 

    while (matcher2.find()) { 
     System.out.println("String: |" + matcher2.group(1) + "| Date: |" 
      + matcher2.group(2) + "|"); 
    } 

這將打印以下爲我(擁有包括| [管道]顯示邊界)。

String: |dffsd fs sfd| Date: |12.12.12| 
String: |asd saddsa dasd| Date: |12.12.12| 
String: |fsadf sdfsdf sdf| Date: |10.10.10| 

String: |Microsoft Visual FoxPro 6.0 language reference| Date: |13.02.12| 
+0

抱歉,沒有爲字符串工作: Microsoft Visual FoxPro 6.0語言參考13.02.12 輸出爲: String:語言參考|日期:| 13.02.12 | 日期看起來總是這樣:dd.mm.yy 我想這是一個小的改變 – test 2012-01-13 12:45:27

+0

請看更新的答案。我認爲它現在都適用。 – adarshr 2012-01-13 13:04:06

+0

有這樣的事情,該字符串可以像「12.12.12sdfsfs sdfsdf」結束,並在最後沒有日期。如果沒有日期,整個事情都需要忽略:/ – test 2012-01-13 14:42:26

相關問題