본문 바로가기

C#/정규 표현식

(9)
C#에서 '역참조 구문'을 사용하여 그룹화된 문자열을 정규 표현식 안에서 참조하는 방법 역참조 구문을 사용하면 그룹화한 문자열을 정규 표현식 안에서 참조할 수 있다. 1. 동일한 문자 두 개가 나올 때를 검색하는 방법 (처음 나온 그룹을 참조하여 동일한 문자를 인식) var text = “도로를 지나가는 차들이 뛰뛰하고 경적을 울리면 반대쪽 차들이 빵빵하고 울렸다.”; var pattern = @”(\w)\1”; //\1이 역참조 구문이다. var matches = Regex.Matches(text, pattern); foreach (Match m in matches) Console.WriteLine(“‘{0}’”, m.Value); 결과 ‘뛰뛰’ ‘빵빵’ \n (n은 숫자)을 통해 그룹화한 문자열을 참조할 수 있다. @”(\w)\1”이라는 정규 표현식으로 처음에 나오는 (\w)에 의해 ‘..
C#에서 정규 표현식 '최단 일치 수량자'를 사용해 패턴에 매칭되는 것 중 가장 짧은 것을 일치시키는 방법 정규 표현식의 최장 일치의 원칙 정규 표현식에는 최장 일치의 원칙이 있다. ‘최장 일치’란 패턴에 매칭되는 것 중에서 가장 긴 것을 일치시킨다는 의미이다. var text = “홍길동18”; var pattern = @””; var matches = Regex.Matches(text, pattern); foreach (Match m in matches) Console.WriteLine(“‘{0}’”, m.Value); “”이라는 정규 표현식을 이용했는데 최장 일치의 원칙이 작용해서 “”이 아니라 “홍길동18” 문자열 전체가 일치한다. 최장 일치의 원칙이 적용된다는 사실을 인지하고 있는 것이 정규 표현식을 쓸 때 주의해야 할 사항이다. 이러한 사실을 고려하지 않고 정규 표현식을 대충 쓰면 생각하지도 못한 ..
C#에서 정규 표현식 '수량자'를 이용하여 일정 수만큼 반복되는 것 찾기 수량자가 필요한 경우 정규 표현식을 쓰다 보면 다음과 같은 작업을 해야 할 경우가 있다. 세 번 이상 반복되는 것과 매칭시킨다. 세 문자나 네 문자로 이루어진 문자열 중에 하나와 매칭 시킨다. 세 번 이상 반복되는 것 -> @”\d\d\d+”라고 쓰면 세 개 이상의 숫자로 구성된 것을 표현할 수 있지만 깔끔한 표현이라고 할 수 없다. 위 표현은 반복 횟수의 범위를 표현할 수도 없다. 수량자 {n} : 직전의 요소가 n번 반복되는 것과 일치한다. {n,} : 직전의 요소가 n번 이상 반복되는 것과 일치한다. {n,m} : 직전의 요소가 n번 이상 m번 이하로 반복되는 것과 일치한다. *나 +나 ?도 수량자의 일종이며 이 기호들을 수량자로 표현하면 아래와 같다. * {0,} 직전의 요소가 0번 이상 반복되는..
C#에서 정규 표현식을 사용하여 문자열을 분할하는 방법 (Regex.Split 메서드) “Sword, Spear ,Bow , Shield,Gun” 다음과 같은 문자열에서 "Sword"와 같은 단어를 추출하고 싶을 때 단어 사이에는 콤마(,)로 구분돼 있는데 콤마 앞뒤에 공백이 존재할 가능성이 있다. String 클래스에 있는 Split 메서드로 처리한다면 var text = “Sword, Spear ,Bow , Shield,Gun”; string[] words = text.Split(','); 단어 앞뒤에 있는 공백이 처리가 안되고 그대로 문자열에 대입이된다. Regex 클래스에 있는 Split 메서드를 이용하면 정규 표현식을 통해 일치한 부분으로 구분할 수 있으므로 String 클래스에 있는 Split 메서드보다 유연하게 처리할 수 있다. var text = “Sword, Spear ,B..
C#에서 정규 표현식을 사용하여 문자열을 치환하는 방법 (Regex.Replace 메서드) 1. Regex.Replace 메서드를 사용하여 문자열 치환 방법 정규 표현식은 String.Replace 메서드로는 할 수 없는 유연한 처리를 수행할 수 있다. 정규 표현식을 사용해서 치환하려면 Regex 클래스에 있는 Replace 메서드를 사용한다. 1) 서로 약간 다른 표기를 원하는 표기로 수정 “쪼금씩”, “쪼끔씩”, “쬐끔씩”과 같이 서로 약간 다른 표기들을 모두 “조금씩”으로 수정하려고 한다. var text = “C# 공부한 내용을 쪼끔씩 정리하자.”; var pattern = @”쪼금씩|쪼끔씩|쬐끔씩”; var replaced = Regex.Replace(text, pattern, “조금씩”); Console.WriteLine(replaced); Regex.Replace 메서드는 지정할 ..
C#에서 정규 표현식으로 일치하는 부분 문자열을 모두 찾고 여러 가지 처리하는 방법 (LINQ 적용, 찾은 부분 문자열의 일부분만 추출) 1. 일치하는 문자열을 모두 찾고 그 결과에 LINQ를 적용하는 방법 Regex 클래스에 있는 Matches 메서드를 사용하면 패턴에 일치하는 모든 문자열을 찾을 수 있다. Matches 메서드의 반환값의 형인 MatchCollection 형은 IEnumerable 인터페이스를 가지고 있지 않기 때문에 이 상태로는 LINQ를 사용할 수 없다. 사용할 수 있게 하려면 Cast 메서드를 사용해 IEnumerable로 변환해야 한다. Cast 메서드는 안에 구체적인 형 (이번 예제에서는 Match)을 지정해 컬렉션을 IEnumerable (이번 예제에서는 IEnumerable)로 변환할 수 있다. var text = “private List results = new List();”; var matches = ..
C#에서 정규 표현식으로 처음 나오는 부분 문자열을 찾는 방법 (Match 메서드) Regex 클래스에 잇는 Match 메서드를 이용하면 지정한 패턴에 일치하는 부분 문자열 중에 문자열 안에서 처음 나오는 것을 찾을 수 있다. var text = “Regex 클래스에 있는 Match 메서드를 사용합니다.”; //두 번째 매개변수로 찾으려는 부분 문자열을 나타내는 정규표현식을 대입한다. Match match = Regex.Match(text, @”\p{IsHangulSyllables}+”); @”\p{IsHangulSyllables}+”는 한글을 나타내는 정규 표현식이다. 그 뒤에 ‘+’를 붙였으므로 한 문자 이상의 한글과 일치한다. Match 메서드의 반환값의 형은 System.Text.RegularExpression.Match 클래스이다. 위 예제에서 반환되는 Match 클래스 인스턴..
C#에서 정규 표현식을 이용해 패턴에 일치하는 부분 문자열 찾기 (일부, 시작, 끝, 완전 일치) 1. 지정한 패턴에 일치하는 부분 문자열이 있는지 판정하는 방법 지정한 패턴에 일치하는 부분 문자열이 있는지 조사려면 Regex 클래스에 있는 IsMatch 메서드를 사용한다. Regex 클래스는 System.Text,RegularExpressions 네임스페이스에 정의되어 있다. using System.Text.RegularExpressions; ... var text = “private List items = new List();” //text 문자열 안에 정규 표현식 패턴 @”List”와 일치하는 부분 문자열이 있는지 조사 bool isMatch = Regex.IsMatch(text, @”List”); Regex 클래스에는 인스턴스 메서드도 존재하므로 다음과 같이 구현할 수도 있다. 반복 처리 안에..