2014-10-07 233 views
1

我想從下面的字符串中找到一個模式。所有包含「MATCH.TEXT3」的單詞,可能是最後一個匹配結尾的單詞。Groovy - 從字符串中提取並顯示子字符串

{MATCH.TEXT1.1=[1, admin, 07/10/14 09:29:34], MATCH.TEXT2.2=[2, admin, 07/10/14 10:01:08], MATCH.TEXT3.3=[3, admin, 07/10/14 10:08:01], MATCH.TEXT3.4=[4, admin, 07/10/14 11:08:01], MATCH=[TEXT3]} 

預期輸出:

MATCH.TEXT3.4 

or 

MATCH.TEXT3.3 
MATCH.TEXT3.4 
+0

你有什麼已經嘗試過? – Opal 2014-10-07 06:04:42

+0

新手到groovy,我使用string.find(「MATCH.TEXT3。*」)做了很長的路要走,然後,由','分裂導致多個值 – 2014-10-07 06:28:41

+1

字符串的來源是什麼?看起來像來自matcher或json的'toString()'。 – cfrick 2014-10-07 07:52:06

回答

5

您可以使用字符串的findAll()方法來提取匹配給定的模式標記:

String s = '{MATCH.TEXT1.1=[1, admin, 07/10/14 09:29:34], MATCH.TEXT2.2=[2, admin, 07/10/14 10:01:08], MATCH.TEXT3.3=[3, admin, 07/10/14 10:08:01], MATCH.TEXT3.4=[4, admin, 07/10/14 11:08:01], MATCH=[TEXT3]}' 

List<String> tokens = s.findAll(/MATCH\.TEXT3(\.[0-9]+)?/) 

assert tokens == ['MATCH.TEXT3.3', 'MATCH.TEXT3.4'] 

String last = tokens.last() 

assert last == 'MATCH.TEXT3.4' 
+0

這個答案也有效,但我不得不接受Haim的回答,因爲它給了我最後一場比賽,這正是我期待的 – 2014-10-08 05:49:49

+0

獲取最後一個元素更加容易: String last = tokens.last()檢查更新後的示例代碼。這是不太嘈雜的恕我直言 – 2014-10-08 06:16:17

1

對於最後一場比賽:

class Finder { 
    static main(args) { 
     def str = '''<your string>''' 
     def textFinder= /(MATCH.TEXT3.\d+)/ 
     def textMatcher = str=~textFinder 
     if(textMatcher.size()>0){ 
      def lastMatch = (Integer) textMatcher.size() - 1 
      println (textMatcher=textMatcher[lastMatch][1])   
     } 
    } 
} 

輸出:
MATCH.TEXT3.4

所有配襯是一個簡單的變化。

+0

正是我在找什麼,謝謝 – 2014-10-08 05:48:54

+0

Szymon的回答更清潔。我會檢查他的答案。請保留我的努力;-) – 2014-10-08 08:18:56