我希望得到4个被空格包围的数字。 例如foo 2420等等 使用regexr我得到了这个模式\ b \ d {4} \ b 我将其翻译为groovy
def courseNum = course.text =~ $/\b\d{4}\b/$
System.out.print(courseNum.group())
这是没有匹配,即使我是肯定的,字符串本身包含4位数。
我做错了什么?
答案 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])
但是,由于您希望 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
即使它不匹配,也不会像当前的实例一样出错。查找全部基本上将所有匹配作为数组列表返回,因此更安全。