수량자가 필요한 경우
정규 표현식을 쓰다 보면 다음과 같은 작업을 해야 할 경우가 있다.
- 세 번 이상 반복되는 것과 매칭시킨다.
- 세 문자나 네 문자로 이루어진 문자열 중에 하나와 매칭 시킨다.
세 번 이상 반복되는 것
-> @”\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]+’ 부분에서는 자릿수에 상관없이 숫자로 구성된 패턴을 찾는다.
'C# > 정규 표현식' 카테고리의 다른 글
C#에서 '역참조 구문'을 사용하여 그룹화된 문자열을 정규 표현식 안에서 참조하는 방법 (0) | 2021.09.05 |
---|---|
C#에서 정규 표현식 '최단 일치 수량자'를 사용해 패턴에 매칭되는 것 중 가장 짧은 것을 일치시키는 방법 (0) | 2021.09.04 |
C#에서 정규 표현식을 사용하여 문자열을 분할하는 방법 (Regex.Split 메서드) (0) | 2021.09.03 |
C#에서 정규 표현식을 사용하여 문자열을 치환하는 방법 (Regex.Replace 메서드) (0) | 2021.09.03 |
C#에서 정규 표현식으로 일치하는 부분 문자열을 모두 찾고 여러 가지 처리하는 방법 (LINQ 적용, 찾은 부분 문자열의 일부분만 추출) (0) | 2021.09.01 |