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