Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 정규식 대체(Substitution) 패턴 완벽 정리

정규식(Regular Expression)은 입력 텍스트와 비교하여 일치 여부를 판별할 수 있는 패턴입니다. 다양한 종류의 문자, 연산자, 구성 요소를 조합해 원하는 형태의 정규식을 정의할 수 있으며, 이 중 대체(Substitution)는 치환(replacement) 패턴 안에서 사용되는 특수한 구문입니다.

C# 정규식 대체란 무엇인가?

대체 요소는 Regex.Replace 메서드처럼 매칭 결과를 다른 문자열로 바꿀 때 치환 패턴 내에 삽입하여 사용합니다. 이를 활용하면 매칭된 그룹의 순서를 재배열하거나, 특수 문자($)를 그대로 출력하거나, 일치 항목 앞뒤의 텍스트를 참조하는 등 다양한 문자열 변환 작업을 손쉽게 처리할 수 있습니다.

C# 정규식 대체 요소 목록

아래 표는 C# 정규식에서 사용할 수 있는 대체 요소와 실제 동작 예시를 정리한 것입니다.

구문 설명 패턴 대체 패턴 입력 문자열 결과 문자열
$number 지정한 그룹 번호와 일치한 부분 문자열로 대체합니다. \b(\w+)(\s)(\w+)\b $3$2$1 "one two" "two one"
${name} 지정한 그룹 이름(name)과 일치한 부분 문자열로 대체합니다. \b(?<word1>\w+)(\s)(?<word2>\w+)\b ${word2} ${word1} "one two" "two one"
$$ 리터럴 "$" 문자 하나로 대체합니다. \b(\d+)\s?USD $$$1 "103 USD" "$103"
$& 일치한 전체 문자열의 복사본으로 대체합니다. (\$*(\d*(\.+\d+)?){1}) **$& "$1.30" "**$1.30**"
$` 일치한 부분 앞에 있는 입력 문자열의 모든 텍스트로 대체합니다. B+ $` "AABBCC" "AAAACC"
$' 일치한 부분 뒤에 있는 입력 문자열의 모든 텍스트로 대체합니다. B+ $' "AABBCC" "AACCCC"
$+ 마지막으로 캡처된 그룹으로 대체합니다. B+(C+) $+ "AABBCCDD" "AACCDD"
$_ 전체 입력 문자열로 대체합니다. B+ $_ "AABBCC" "AAAABBCCCC"

대체 패턴 활용 예제

다음은 C#의 Regex.Replace 메서드와 함께 대체 요소를 사용하는 간단한 예제입니다.

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string input = "one two";
        // 그룹 순서 뒤집기 ($number 활용)
        string result = Regex.Replace(input, @"\b(\w+)(\s)(\w+)\b", "$3$2$1");
        Console.WriteLine(result); // 출력: two one

        string price = "103 USD";
        // 달러 기호 붙이기 ($$와 $number 활용)
        string converted = Regex.Replace(price, @"\b(\d+)\s?USD", "$$$1");
        Console.WriteLine(converted); // 출력: $103
    }
}

대체 요소 사용 시 주의 사항

- $ 문자 처리: $는 대체 패턴에서 특수한 의미를 가지므로, 문자 그대로의 $를 출력하려면 반드시 $$를 사용해야 합니다.
- 그룹 참조 방식 선택: $number는 두 자릿수 그룹 번호도 인식하기 때문에, 그룹이 많은 복잡한 패턴에서는 ${name}처럼 이름이 있는 그룹을 사용하는 것이 더 안전하고 가독성도 좋습니다.
- 적용 범위: 대체 요소는 Regex.Replace, Match.Result 같은 치환 작업에서만 유효하며, 일반적인 검색 패턴에서는 인식되지 않습니다.

마무리

C# 정규식의 대체 요소를 잘 활용하면 복잡한 문자열 치환 로직을 몇 줄의 코드로 간결하게 처리할 수 있습니다. 그룹 번호 참조부터 전체 문자열 치환까지 상황에 맞는 대체 패턴을 익혀두면 텍스트 처리 작업의 생산성이 크게 향상됩니다.