"서기 XXXX년"이란 문자열을 검색하려면 어떻게 해야 할까?
String 클래스에 있는 FindIndex 메서드로 "서기"를 찾고 그 뒤에 숫자가 나오는지를 조사하고 그 다음에 "년"이 나오는지 조사하는 코드를 작성하면 구할 수 있을 것이다.
하지만 조건을 하나하나 코드로 작성해야하는 위 방법은 매우 귀찮다.
이러한 처리를 수행할 때 정규 표현식을 사용하면 매우 쉽게 검색 처리를 작성할 수 있다.
정규 표현식의 예시
[Ss]ource
"Source" 또는 "source"을 나타내는 정규 표현식
[]는 문자 그룹을 나타낸다.
[] 안에 여러 개의 문자를 지정할 수 있다.
위 표현에서는 'S'와 's'중 하나와 일치하는 것을 검색하게 된다.
Source|원천
"Source"또는 "원천"을 나타내는 정규 표현식
파이프 기호(|)는 ‘OR’를 의미한다. “Source”이나 “원천” 중 하나와 일치한다.
첫 번째 예시를 이 방법으로 표현하면 Source|source이 된다.
back.+
“back” 뒤에 임의의 문자가 한 문자 이상 나오는 것을 나타내는 정규 표현식
마침표 ‘.’는 줄바꿈 문자를 제외한 임의의 한 문자와 일치한다.
‘+’는 직전의 문자를 한 번 이상 반복하는 것과 일치한다.
다시 말해 “.+”라고 쓰면 임의의 문자가 한 문자 이상 연속해서 나온다는 것을 나타내므로 “backslash”나 “backup”이나 “back door”등과 일치한다.
‘+’ 대신 ‘*’을 사용 (back.*)하면 ‘직전 문자를 0번 이상 반복한다’라는 의미가 되어 “back” 자체와도 일치하게 된다.
[0-9]+초
“8초”, “24초”같은 초를 나타내는 정규 표현식
[] 안에 있는 ‘-’는 문자 범위를 나타낸다.
[0-9]는 [0123456789]와 같은 의미
그 뒤에 ‘+’가 있으므로 숫자가 한 글자 이상 연속하고 그 뒤에 ‘초’가 나오는 문자열과 일치한다.
영문과 숫자를 나타내려면 [0-9a-zA-z]라고 쓴다.
서기\d+년
“서기2021년”과 같이 연도를 나타내는 정규 표현식
‘\d’는 숫자 한 문자를 나타낸다.
‘+’는 한 번 이상 반복되는 것을 나타내므로 "서기11년", "서기12000년'과 같은 문자열과 일치한다.
주의할 점은 정규 표현식을 잘못 쓰면 의도한 부분 문자열과 다른 부분 문자열에 일치하게 된다.
[Tt]ime이라는 정규 표현식을 사용해서 검색하면 “Timer”나 “timetable”과 같은 문자열과도 일치한다.
그래서 문장 안에 time단독으로 단어가 있는지 여부를 조사하려면 [Tt]ime이라는 정규 표현식은 적절치 않다.
정규 표현식의 특수기호 목록
^ : 행의 시작 지점을 나타낸다.
$ : 행의 끝 지점을 나타낸다.
\b : 영문, 숫자와 그 밖의 문자와의 경계를 나타낸다.
. : 임의의 한 문자를 나타낸다.
\d : 0에서 9까지의 숫자 한 문자와 일치한다
\s : 공백, 탭, 줄바꿈 코드의 한 문자와 일치한다.
\S: 공백 외의 문자 하나와 일치한다
\w : 단어에 사용된 임의의 문자 하나와 일치한다.
| : 파이프기호로 구분된 요소중 하나와 일치한다.
[] : [] 안에 있는 임의의 한 문자와 일치한다. 하이픈(-)은 범위를 나타낸다.
[^] : 지정한 문자 외의 문자가 [] 안에서 일치한다.
* : 직전의 요소가 0번 이상 반복되는 것과 일치한다.
+ : 직전의 요소가 1번 이상 반복되는 것과 일치한다.
? : 직전의 요소가 1개 또는 0개 있는 것과 일치한다.
{n} : 직전의 요소가 n번 반복되는 것과 일치한다.
{n, } : 직전의 요소가 n번 이상 반복되는 것과 일치한다.
{n, m} : 직전의 요소가 n번 이상 m번 이하로 반복되는 것과 일치한다.
\p{IsHangulJamo} : 한글을 나타낸다.
\p{IsHangulCompatibilityJamo} : 한글을 나타낸다.
\p{IsHangulSyllables} : 한글을 나타낸다.
() : () 안에 있는 것을 그룹화한다. 1부터 순서대로 번호를 매긴다. Groups 속성을 통해 참조할 수 있다.
\n : 역참조 구문이다. n은 숫자다. 앞쪽에 있는 캡처링 그룹 내용과 일치하다.
*? : 최소한의 횟수로 반복되는 것에서 처음 일치하는 것을 나타낸다.
+? : 한 번 이상 그리고 최소한의 횟수로 반복되는 것을 나타낸다.
'C# > 정규 표현식' 카테고리의 다른 글
C#에서 정규 표현식을 사용하여 문자열을 분할하는 방법 (Regex.Split 메서드) (0) | 2021.09.03 |
---|---|
C#에서 정규 표현식을 사용하여 문자열을 치환하는 방법 (Regex.Replace 메서드) (0) | 2021.09.03 |
C#에서 정규 표현식으로 일치하는 부분 문자열을 모두 찾고 여러 가지 처리하는 방법 (LINQ 적용, 찾은 부분 문자열의 일부분만 추출) (0) | 2021.09.01 |
C#에서 정규 표현식으로 처음 나오는 부분 문자열을 찾는 방법 (Match 메서드) (0) | 2021.09.01 |
C#에서 정규 표현식을 이용해 패턴에 일치하는 부분 문자열 찾기 (일부, 시작, 끝, 완전 일치) (0) | 2021.09.01 |