我正在尋找將被空格包圍的4位數字。 例如FOO 2420嗒嗒 使用regexr我得到這個模式\ B \ d {4} \ b 我翻譯這時髦的Regexr表達式在groovy中不起作用
def courseNum = course.text =~ $/\b\d{4}\b/$
System.out.print(courseNum.group())
,這是一個沒有返回比賽,即使我肯定的字符串中包含4個數字由他們自己。
我在做什麼錯了?
我正在尋找將被空格包圍的4位數字。 例如FOO 2420嗒嗒 使用regexr我得到這個模式\ B \ d {4} \ b 我翻譯這時髦的Regexr表達式在groovy中不起作用
def courseNum = course.text =~ $/\b\d{4}\b/$
System.out.print(courseNum.group())
,這是一個沒有返回比賽,即使我肯定的字符串中包含4個數字由他們自己。
我在做什麼錯了?
您使用的.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])
不過,既然你想獲得4位,這將是由空格包圍,你不必依靠\b
字邊界,使用lookarounds要求字符串的開始/結尾或空白周圍的4位數字:
/(?<!\S)\d{4}(?!\S)/
請參閱regex demo。
另一個好方法是使用findAll(regex)
方法。
def text = "CSE 2443, MATH 5003"
text.findAll(/\b\d{4}\b/).each {
println it
}
在([2443, 5003]
)
2443
5003
所得即使不匹配,也不會錯誤,如當前的實例。查找所有基本上返回所有匹配作爲數組列表,因此更安全。