본문 바로가기

C#/정규 표현식

C#에서 정규 표현식 '수량자'를 이용하여 일정 수만큼 반복되는 것 찾기

수량자가 필요한 경우

 

정규 표현식을 쓰다 보면 다음과 같은 작업을 해야 할 경우가 있다.

  • 세 번 이상 반복되는 것과 매칭시킨다.
  • 세 문자나 네 문자로 이루어진 문자열 중에 하나와 매칭 시킨다.

세 번 이상 반복되는 것

-> @”\d\d\d+”라고 쓰면 세 개 이상의 숫자로 구성된 것을 표현할 수 있지만 깔끔한 표현이라고 할 수 없다.

 

위 표현은 반복 횟수의 범위를 표현할 수도 없다.

 

 

 

수량자

 

{n}  : 직전의 요소가 n번 반복되는 것과 일치한다.

{n,}  : 직전의 요소가 n번 이상 반복되는 것과 일치한다.

{n,m}  : 직전의 요소가 n번 이상 m번 이하로 반복되는 것과 일치한다.

*+?도 수량자의 일종이며 이 기호들을 수량자로 표현하면 아래와 같다.

    {0,}      직전의 요소가 0번 이상 반복되는 것과 일치한다.

     {1,}      직전의 요소가 1번 이상 반복되는 것과 일치한다.

    {0,1}    직전의 요소가 0개 또는 1개 나온 것과 일치한다.

 

 

 

수량자 {n,}을 사용하여 영문자로 시작하고 그 뒤에 나오는 숫자가 다섯 문자 이상 연속하는 부분 문자열과 일치시키는 예

 

var text = ‘123456 b123 Z12345 AX98765”;
var pattern = @”\b[a-zA-Z][0-9]{5, }\b”;
var matches = Regex.Matches(text, pattern);
foreach(Match m in matches)
    Console.WrteLIne(“‘{0}’”, m.Value);

 

결과

‘a123456’
‘Z12345’

 

 

 

수량자 {n,m}을 사용하여 일련번호에서 첫 번째로 구분된 번호의 자릿수가 두 자리 또는 세자리인 상품을 골라보는 예

 

//한글 이름과 첫 번째 번호 그리고 두 번째 번호로 구분되어있는 일련번호
//text 문자열에 일련번호 대입
...
var pattern = @”\p{IsHangulSyllables}+-[0-9]{2,3}-[0-9]+”;
var matches = Regex.Matches(text, pattern);

 

@”\p{IsHangulSyllables}+-[0-9]{2,3}-[0-9]+”

위 예에서 사용한 수량자를 사용한 정규표현식 분석

 

  • ‘\p{IsHangulSyllables}+’ 부분에서 하나 이상의 한글 문자로 구성된 패턴을 찾는다.

  • ‘-’ 부분에서 구분자로 사용된 하이픈을 찾는다.

  • ‘[0-9]{2-3} 부분에서 두 자리 또는 세 자리 숫자로 구성된 패턴을 찾는다.

  • ‘-’ 부분에서 구분자로 사용된 하이픈을 뒤쪽에서 찾는다.

  • ‘[0-9]+’ 부분에서는 자릿수에 상관없이 숫자로 구성된 패턴을 찾는다.