2016-09-22 3 views
0

하나의 정규식 패턴으로 다음을 수행하고 싶습니다. (프로그램 코드에 액세스 할 수 없으며 정규 표현식 패턴 만 삽입 할 수 있습니다) 입력란에 텍스트가 있습니다. 경우 "레몬"를 REGEX - group - JAVA

1000 lemons, 2 apples. 

나는 자동으로 자동으로 내가 원하는 경우 "사과"에 대한 이들의 수, 이들의 수를 원한다. 정규식 패턴으로

/\d+\s(apples)/ 

처럼 나는 결과

2 apples 

을 얻을 것입니다하지만 결과 ONE 정규식 패턴

2 

를 원한다.

어떻게하면됩니까? 내가 프로그램 코드에 액세스가있어

+0

코드를 알려주십시오. '사과 '가 아닌'\ d +'주위에 캡처 그룹을 사용할 수 있습니다. 아마도, 필요한 것은'(\ d +) \ s * \ w +'입니다. 또는'(\ d +) \ s * (?: 사과? 레몬?)' –

+0

@ WiktorStribiżew 그러나이 경우 나는 "1000 lemons"라는 결과를 얻는다. – CyKon

답변

1

때문에, 나는 단지 확인해야

당신은 긍정적 예측 기반 정규 표현식이 필요 정규식 패턴 (즉, 부분을 삽입 할 수 있습니다 뿐만 출력에서 ​​폐기) (?=....) 구조 내부에 있어야합니다 : 귀하의 예제

\d+(?=\s*\w+) 

또는 좀 더 구체적를 (당신이 필요로하는 경우

\d+(?=\s*(?:apples?|lemons?)) 

regex demo 1demo 2를 참조하십시오 특정 단어 만 해당) 전에 자리하였습니다.

lookaheads은 텍스트를 소비하지 않으므로 일치하는 텍스트가 출력물에 표시되지 않습니다. 단지 레몬의 번호를 검색하려면

?가 선행 문자 옵션을 (1 명 또는 0 발생 일치)하게하는 것이

\d+(?=\s*lemons?) 

주를 사용합니다.

+0

좋아, 훨씬 나아 보인다. 그러나 만일 내가 레몬의 수만 필요로하면? – CyKon

+0

'\ d + (? = \ s * lemons?)'와 같이 앞뒤에'레몬 '을 붙이십시오. 마지막에'?'을 붙이면's'가 선택 사항이됩니다. ** AND ** 단어의 경계를 '\ b'로 묶어 전체 단어에만 매치시킬 수도 있습니다 *. –

+0

좋습니다. 고맙습니다 :) – CyKon