2016-10-22 10 views
0

我正在尋找將被空格包圍的4位數字。 例如FOO 2420嗒嗒 使用regexr我得到這個模式\ B \ d {4} \ b 我翻譯這時髦的Regexr表達式在groovy中不起作用

def courseNum = course.text =~ $/\b\d{4}\b/$ 
System.out.print(courseNum.group()) 

,這是一個沒有返回比賽,即使我肯定的字符串中包含4個數字由他們自己。

我在做什麼錯了?

回答

0

您使用的.group()導致java.lang.IllegalStateException: No match found異常。您只需通過第0號索引courseNum[0]訪問匹配值即可。

另外,我會在這裏使用一個簡單的斜槓字符串,因爲足夠方便的定義一個正則表達式。

def text = "New 7234 pcs" 
def courseNum = text =~ /\b\d{4}\b/ 
print(courseNum[0]) 

this Groovy demo

不過,既然你想獲得4位,這將是由空格包圍,你不必依靠\b字邊界,使用lookarounds要求字符串的開始/結尾或空白周圍的4位數字:

/(?<!\S)\d{4}(?!\S)/ 

請參閱regex demo

0

另一個好方法是使用findAll(regex)方法。

​def text = "CSE 2443, MATH 5003" 
text.findAll(/\b\d{4}\b/).each { 
    println it 
} 

在([2443, 5003]

2443 
5003 

所得即使不匹配,也不會錯誤,如當前的實例。查找所有基本上返回所有匹配作爲數組列表,因此更安全。