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

C#에서 대소문자를 구분하지 않고 문자열을 치환하는 방법 – string.Replace의 대안

C#의 Replace() 메서드는 문자열 클래스에 속한 메서드로, 현재 문자열 객체에서 지정된 유니코드 문자 또는 지정된 문자열을 모두 찾아 새 값으로 교체한 뒤, 수정된 새 문자열을 반환합니다. 인자에 따라 여러 형태로 오버로드되어 사용할 수 있습니다.

다만 Replace() 메서드는 기본적으로 대소문자를 엄격하게 구분한다는 한계가 있습니다. 대소문자 구분 없이 치환하고 싶다면 정규식(Regex)을 활용하는 것이 가장 일반적인 해결책입니다.

정규식(Regex)이란?

정규식은 텍스트를 처리하는 강력하고 유연하며 효율적인 방법을 제공합니다. 정규식의 폭넓은 패턴 매칭 표기법을 활용하면 대량의 텍스트도 빠르게 처리할 수 있으며, 다음과 같은 작업에 유용합니다.

  • 특정 문자 패턴 검색

  • 텍스트가 사전에 정의된 패턴(예: 이메일 주소)과 일치하는지 검증

  • 텍스트 하위 문자열의 추출, 편집, 치환 또는 삭제

  • 추출한 문자열을 컬렉션에 추가하여 보고서 생성

예제 1 – 기본 Replace() 메서드 (대소문자 구분)

class Program{
    static void Main(string[] args){
        String str = "Cricket Team";
        Console.WriteLine("OldString : " + str);
        Console.WriteLine("NewString: " + str.Replace('e', 'E'));
        Console.WriteLine("\nOldString: " + str);
        Console.ReadLine();
    }
}

출력 결과

OldString : Cricket Team
NewString: CrickEt TEam
OldString: Cricket Team

위 예제에서는 소문자 'e'만 'E'로 변경되고, 이미 대문자인 'E'는 그대로 유지됩니다. 또한 문자열은 불변(immutable)이므로 원본 문자열은 변경되지 않고 새 문자열이 반환됩니다.

예제 2 – Regex를 활용한 대소문자 무시 치환

대소문자 구분 없이 치환하려면 Regex 클래스와 RegexOptions.IgnoreCase 옵션을 사용하면 됩니다.

class Program{
    static void Main(string[] args){
        String str = "Cricket Team";
        Console.WriteLine("OldString : " + str);
        Console.WriteLine("NewString: " + CaseInsensitiveReplace("Cricket Team", "t", "b"));
        Console.WriteLine("\nOldString: " + str);
        Console.ReadLine();
    }

    static string CaseInsensitiveReplace(string originalString, string oldValue, string newValue){
        Regex regEx = new Regex(oldValue,
            RegexOptions.IgnoreCase | RegexOptions.Multiline);
        return regEx.Replace(originalString, newValue);
    }
}

출력 결과

OldString : Cricket Team
NewString: Crickeb beam
OldString: Cricket Team

RegexOptions.IgnoreCase 옵션 덕분에 소문자 't'와 대문자 'T'가 모두 치환 대상이 됩니다. 그 결과 "Cricket"의 't'와 "Team"의 'T'가 모두 'b'로 바뀌어 "Crickeb beam"이 출력됩니다. 이처럼 정규식을 사용하면 대소문자 구분 여부를 자유롭게 제어할 수 있으며, 멀티라인 처리 등 다양한 옵션 조합도 가능합니다.