Regexr表达式在groovy中不起作用

时间:2016-10-22 18:04:21

标签: regex groovy

我希望得到4个被空格包围的数字。 例如foo 2420等等 使用regexr我得到了这个模式\ b \ d {4} \ b 我将其翻译为groovy

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

这是没有匹配,即使我是肯定的,字符串本身包含4位数。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

您使用的.group()会导致java.lang.IllegalStateException: No match found例外。您只需要通过第0个索引courseNum[0]访问匹配值。

另外,我会在这里使用一个简单的slashy字符串,因为它足以定义正则表达式。

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

请参阅this Groovy demo

但是,由于您希望 4位数字被空格包围 ,因此您不必依赖\b字边界,请使用外观要求字符串开始/结束或4位数字周围的空格:

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

请参阅regex demo

答案 1 :(得分:0)

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

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

导致([2443, 5003]

2443
5003

即使它不匹配,也不会像当前的实例一样出错。查找全部基本上将所有匹配作为数组列表返回,因此更安全。