본문 바로가기

C#/정규 표현식

C#에서 정규 표현식을 이용해 패턴에 일치하는 부분 문자열 찾기 (일부, 시작, 끝, 완전 일치)

1. 지정한 패턴에 일치하는 부분 문자열이 있는지 판정하는 방법

 

지정한 패턴에 일치하는 부분 문자열이 있는지 조사려면 Regex 클래스에 있는 IsMatch 메서드를 사용한다.

 

Regex 클래스는 System.Text,RegularExpressions 네임스페이스에 정의되어 있다.

using System.Text.RegularExpressions;
...
var text = “private List<string> items = new List<string>();”
//text 문자열 안에 정규 표현식 패턴 @”List<\w+>”와 일치하는 부분 문자열이 있는지 조사
bool isMatch = Regex.IsMatch(text, @”List<\w+>”);

 

 

Regex 클래스에는 인스턴스 메서드도 존재하므로 다음과 같이 구현할 수도 있다.

반복 처리 안에서 같은 정규 표현식 패턴을 이용하려면 루프 밖에서 Regex 인스턴스를 생성하고 루프 안에서는 아래와 같이 인스턴스 메서드를 사용하는 것이 프로그램 성능을 향상시킬 수 있는 방법이다.

var text = “private List<string> items = new List<string>();”
var regex = new Regex(@”List<\w+>”);
bool isMatch = regex.IsMatch(text);

 

 

‘@’가 없는 표준 고정값 문자열이라면 ‘\’ 기호가 이스케이프 시퀀스로 인식되므로 ‘\’ 기호가 많아서 코드를 읽기 어려워진다.

정규 표현식의 패턴을 쓸 때는 읽고 쓰기 쉽게 ‘@’가 붙은 축자 문자열 리터럴을 사용하는게 좋다.'

 

 

2. 지정한 패턴의 문자열로 시작되는지 여부를 판정하는 방법

 

정규 표현식에서 ‘^’ 기호는 행의 시작 지점을 나타내는 특수 기호이므로 다음과 같은 코드를 통해 문자열의 시작 지점 부분이 일치하는지 조사할 수 있다.

var text = “using System.Text.RegularExpressions;”;
//“using”으로 시작되는지 조사
bool isMatch = Regex.IsMatch(text, @”^using”);

 

 

3. 지정한 패턴으로 문자열이 끝나는지 여부를 판정하는 방법

 

‘$’기호는 행의 끝 지점을 나타내는 특수 기호이다.

var text = “using System.Text.RegularExpressions;”;
//"RegularExpressions;"으로 끝나는지 조사
bool isMatch = Regex.IsMatch(text, @”RegularExpressions;$”);

 

 

4. 지정한 패턴에 완전히 일치하는지 여부를 판정하는 방법

 

앞서 나왔던 행의 시작 지점(^)행의 끝 지점($)을 나타내는 두 개의 특수 기호를 사용하면 지정된 패턴에 문자열이 완전히 일치하는지 조사할 수 있다.

var strings = new[] { “Microsoft Windows”, “Windows Server”, “Windows”, };
//“Windows” 또는 “windows” 문자열에 완전히 일치하는 문자열 찾기
var regex = new Regex(@”^(W|w)indows$”);
var count = strings.Count(s => regex.IsMatch(s));

 

정규 표현식 패턴인 @”^(W|w)indows$”@”^[Ww]indows$”라고 써도 동일한 결과가 나온다.

 

Count 메서드 안에서 람다식이 여러 번 호출되므로 미리 Regex 인스턴스를 생성해두고 인스턴스 메서드인 IsMatch 메서드를 호출하는게 좋다.