2014-09-03 2 views
1

I 같이 다음과 같이 입력 데이터가 :정규식 기 재 구조화

AB 
AB_Test 
AB_Test123 

예상 출력 :

AB 
AB_Test 

I 정규식을 일치 :

([A-Z]{2})(_([a-zA-Z]*))? 

Regular expression visualization

Debuggex Demo

위의 정규 표현식에서 $ 1의 문자열을 얻습니다. & $ 3. 문자열이 $ 1 & $ 2 (위의 정규식에서 그룹 2를 생략)에 있도록 정규식을 수정하고 싶습니다.

이제 그룹을 사용하여 일치하는 문자열을 처리하려고합니다. 그래서 나는 그것을 순서대로 원한다.

위 정규식을 변경할 수있는 방법이 있습니까?

+0

시도해보십시오. (([A-Z] {2}) _? [a-zA-Z] *)이게 당신이 찾고있는가요? [DEMO] (http://regex101.com/r/mG3eL5/1) – Braj

답변

2

, 부정적인 내다 주장 사용

^([A-Z]{2})(?!.*\d.*)(?:_([A-Za-z]*))? 

Demo

또는 문자열의 양쪽 끝에서 앵커를 추가

^([A-Z]{2})(?:_([A-Za-z]*))?$ 

Demo 2

e 앵커를 사용하려면 여러 줄 대상이있는 경우 m 플래그를 사용해야합니다.

+1

위대한 데모 사이트입니다. 나는 전에 그것을 보지 못했다. – terrywb

1

당신은 당신이 원하지 않는 일에 대한 비 캡처 그룹을 사용해야합니다

^([A-Z]{2})(?:_([a-zA-Z]*))?$

편집 : 나는 또한 시작하고 당신이 선을 일치시킬 것으로 보인다 때문에 앵커를 종료 추가 밑줄 문자 뒤의 문자가 모두 문자 인 경우에만. 당신이 숫자를 가지고있는 문자열을 제거하려는 경우

+0

나는 일했다 : https://www.debuggex.com/r/rqVUMw4pxoj56Egr. 당신의 대답을 받아 들일 것입니다. 감사합니다 ... – Ambrish

+0

@Ambrish 귀하의 게시물에 언급 된대로 예상 출력을 받고 있습니까? – Braj

+0

그룹'([a-zA-Z]) *)'에서'*'의 위치가 잘못되었습니다. 그룹 안에 있어야합니다. – Ambrish