2017-12-03 1 views
1

문자열에서 가격을 캡처하려고합니다. 그러나, 나는 가격 그룹을 붙잡기에있는 약간 어려움을 직면했다. 아래는 나의 샘플 데이터와 나의 접근 방식이다.정규식 부정적인 Lookbehind 및 Lookahead

샘플

cash $450 
012-6323735 
cash 450 
500 

현재 접근

나는 부정적인 lookbehind 및 내다 사용해보십시오 "-"문자

(?<!\-)(\d+)(?!\-) 

전류 출력

enter image description here

누구나 가격 그룹을 파악할 생각이 있습니까?

원하는 출력

현금 $ 450 (사실, 그룹 450 캡처)

012-6323735 (거짓)이

현금 450 (사실, 그룹 (450)를 캡처)

500 (True, Capture Group 500)

+2

당신이 단어 경계와 소유 정량 사용할 수 있습니다'\의 B를 (

+1

하이픈은 특수 문자가 아니므로 이스케이프 할 필요가 없습니다. –

+0

엔진이 지정되지 않았으므로, 소유량 한정 기호는 거의 해결책이 아닙니다. – revo

답변

2

정규 표현식에서 숫자 문자열 앞뒤의 값이 대시가 아니어야한다고 말하면 정규 표현식 엔진은 시퀀스의 숫자 중 하나를 사용하여이 요구 사항을 만족하게됩니다. 예를 들어, 01 다음에 2이 나오는데 대시가 아니므로 01이 캡처해야합니다. 분명히, 이것은 당신이 원하는 것이 아닙니다. 이 문제를 해결하는

한 가지 방법은 이전과 캡처 그룹 후 앵커에게 \b을 추가하는 것입니다

(?<!\-)\b(\d+)\b(?!\-) 

Demo.

관련 문제