2016-11-24 3 views
2

일반 형식의 항목 번호가 있습니다. 1-3 자리 뒤에 선택적 소문자가오고 그 뒤에 선택적 단일자가오고 그 뒤에 단어 한 개와 선택적 단일 숫자가옵니다. 예를 들어, 다음의 모든 합법적 인 항목 번호는 다음과 같습니다 "21aRepair", "04iMod2", "04d1RR", "5", "07", "8a", "09b", "04g3"C# 캡쳐 된 그룹 다음에 단어를 캡처하는 정규 표현식

나는 형태의 구성 요소들로 이러한 항목 번호를 중단해야합니다 하나의 옵션 다음에 구성 요소 1) 옵션 소문자 뒤에 1-3 자리

예를 들어

자리 구성 요소 2) 단어 구성 요소 3) 선택 한 자리 :

"21aRepair"이가되어야 "21a", "Repair", null

"04iMod2""04i", "Mod", "2"

"04d1RR""04d1", "RR", null

"5" 내가 잘 작동 다음 regex: (^\d{1,3}[a-z]?\d?) 구성 요소 1. 내가 성공하지 않고 구성 요소 2에 대한 몇 가지 옵션을 시도했다 "5", null, null

가되어야이되어야 될 것이다.

나는 다음과 같이 생각했다 : (?<=^\d{1,3}[a-z]?\d?)([a-zA-Z]*\d?). lookbehind "(?<="을 구성 요소 1 패턴에 추가하면 "구성 요소 1 뒤에있는 것이 무엇이든 가져 가십시오"라고 표시되고 그룹 ([a-zA-Z]*\d?)은 구성 요소 2 및 3과 일치해야합니다. 예상되는 결과가 나오지 않습니다. 누군가 내가 잘못 가고 있다고 말할 수 있습니까?

+3

중간에있는 단어의 첫 번째 문자는 항상 대문자입니까? –

답변

3

당신은 regex demo

세부 참조

^(\d{1,3}[a-z]?\d?)([a-zA-Z]*)(\d?)$ 

사용을 고려할 수 있습니다

  • ^ - 문자열의 시작
  • (\d{1,3}[a-z]?\d?) - 그룹 1 : 구성 요소 1, 3에를 숫자, 선택적 소문자 ASC II 문자 및 선택적 자리
  • ([a-zA-Z]*) - 그룹 2 : 단어, 0 개 이상의 ASCII 문자
  • (\d?) - 그룹 3 : 옵션으로 자리
  • $ - C#에서 문자열

의 최종 사용

var m = Regex.Match(str, @"^(\d{1,3}[a-z]?\d?)([a-zA-Z]*)(\d?)$"); 

체크 m.Success사실이며, 세 GROU에 액세스하는 경우 ps 사용 m.Groups[n].Value 여기서 n은 그룹 ID입니다.

+0

=) 내가 가지고있는 것과 동일 – bixarrio

+0

"단어"가 될 수있는 내용에 따라 변형이있을 수 있습니다. –

+0

Brilliant!고맙습니다! –