2016-10-22 3 views
0

공백으로 묶일 4 자리 숫자를 얻으려고합니다. 예 : foo는 2420 나는 이것이 내가 문자열로 4 자리 숫자를 포함 않습니다 긍정적이 있어도 아무 일치를 반환하지 않습니다정규 표현식이 그루비에서 작동하지 않습니다

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

로 끝내이 번역이 패턴 \ ㄴ \ d를 {4} \ B를 있어 ㅋ 사용 regexr 그들 자신.

내가 뭘 잘못하고 있니?

답변

0

.group()java.lang.IllegalStateException: No match found 예외가 발생합니다. 0 번째 색인 인 courseNum[0]을 통해 일치 값에 액세스하면됩니다.

또한 정규 표현식을 정의하기에 충분하고 편리하기 때문에 여기서 간단한 슬래시 문자열을 사용합니다. 당신이 공백에 둘러싸여있을 것 4 자리 숫자를 얻기 위해 원하기 때문에

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

는, 그러나

this Groovy demo를 참조하십시오, 당신은 \b 단어 경계에 의존하지 않아도, 사용 lookarounds 문자열의 시작을 필요로하는/4 자리 숫자의 주위에 말 또는 공백 :

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

regex demo를 참조하십시오.

0

이렇게하는 또 다른 좋은 방법은 findAll(regex) 방법입니다. 일치하지 않는 경우에도 ([2443, 5003])

2443 
5003 

결과

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

, 당신의 현재 인스턴스와 같은 오류하지 않습니다. Find all은 기본적으로 모든 일치를 배열 목록으로 반환하므로 더 안전합니다.

관련 문제