2016-08-08 4 views
1

다음은 제 패턴입니다. 그것은 작동하지 않는 것 같습니다. 기본적으로 2 ~ 3 자의 영숫자로 colorcode를 찾고 있습니다. 하지만 이것은 작동하지 않는 것 같습니다.C# 정규 표현식 패턴이 작동하지 않습니다.

123456 STLI Ocean EHC_Q 
colorcode: EHC is valid 
123456 STLI Ocean EHCD_Q 
colorcode: HCD is invalid 

사람이 어떻게이 컬러 코드 2 숫자 3을해야한다고 그렇게 작동하도록 도와 줄 수 : 결과와

^(?<productno>\d{6})\s(?<mattype>\w+).*?(\s)?((?<colorcode>[A-Z0-9]{3})|(?<viewcode>\(view\d+\))*)(?:_[A-Z])?$ 

?

유효한 시험 datas :

123456 STLI_Q 
123456 STLI Ocean EHC_Q 
123456 STLI White WE_Q 
123456 FMV SPIN FUCHSIA 2YP 
123456 STLI (view002)_Q 
123456 STL AQUA WBP 

감사

+0

시도 [ '^ \ S * \ S * (:( \ (도면 \ D + \)?) ( D {6} \?) ( + w \?).? | (?[A-Z0-9] {2,3})) (? : _ [AZ])? $'] (http://regexstorm.net/tester?p=%5e (% 3f % 3cproductno % (% 3f % 3a) (% 3f % 3cviewcode % 3e % 5c (보기 % 5cd % 2b %) * % 3f % 5c * % 3c % 5c) % 3c % 5cr % 3f % 24 & i = 507920 (% 3f % 3a_ % 5ba-Z % 5d) STLI_Q % 0d % 0a158035 + STLI + Ocean + EHC_Q % 0d % 0a158035 + STLI + White + WE_Q % 0d % 0a306002 + FMV + SPIN + FUCHSIA + 2YP % 0d % 0a507918 + STLI + (view002) _Q % 0d % 0a306002 + STL + AQUA + WBP & o = m) –

+0

또는''^ (? \ d {6}) \ s (? \ w +). *? \ s * (? :(? \ ew \ d + \)) | (?\ b [A-Z0-9] {2,3})) (? : _ [AZ])? $'] (http://regexstorm.net/tester?p=%5e (% 3f % 3cproductno % (% 3f % 3a) (% 3f % 3cviewcode % 3e % 5c (보기 % 5cd % 2b %) * % 3f % 5c * % 3c % 5c) % 3c % 3c % 3c % 3c % 5c % 3c % 3d % 5d % 7b2 % 2c3 % 7d) % (% 3f % 3a_ % 5bA-Z % 5d) % 3c % = 507920 + STLI_Q % 0d % 0a158035 + STLI + Ocean + EHC_Q % 0d % 0a158035 + STLI + White + WE_Q % 0d % 0a306002 + FMV + SPIN + FUCHSIA + 2YP % 0d % 0a507918 + STLI + (view002) _Q % 0d % 0a306002 + STL + AQUA + WBP % 0d % 0a123456 + STLI + Ocean + EHCD_Q & o = m)? –

+0

아니요. 작동하지 않습니다. EHCD_Q로 끝나면 여전히 HCD를 얻습니다. –

답변

1

난 당신이 regex demo

주요 변화는 내가 단어 경계를 추가한다는 것입니다 참조

^(?<productno>\d{6})\s(?<mattype>\w+).*?\s*(?:(?<viewcode>\(view\d+\))|(?<colorcode>\b[A-Z0-9]{2,3}))?(?:_[A-Z])?$ 

를 사용할 수 있다고 생각 \bcolorcode patt의 시작 부분 ern을 지정하고 제한 수량을 {2,3}으로 변경하여 2 또는 3 자의 대문자 ASCII 문자 또는 숫자와 일치시킵니다.

는 또한 (하나 또는 제로 공백이있을 수있는 경우 \s?를 사용할 수 있습니다>\s*(\s)?) 일부 캡처 그룹을 제거하고 하나 비 캡처로 viewcodecolorcode 그룹에 대한 "컨테이너"그룹을 돌렸다.

색상 코드 및보기 코드가없는 항목을 일치 시키려면 ? 수량 한정자를 추가하여 전체 "컨테이너"비 캡처 그룹을 선택 사항으로 만들었습니다.

enter image description here

+1

그게 전부예요. 그것은 효과가 있었다.^(? \ d {6}) \ s (? \ w +). *? (\ s)? (( \ b [A-Z0-9] {2,3}) * | ( \ (view \ d + \)) *) (? : _ [AZ])? $ –

+1

이것은 매력처럼 작동하며 표시 한 결과는 실제로 매우 유용합니다. 정말 고맙습니다. –

관련 문제