금백조의 개발 블로그

[C#]정규표현식 사용하기 본문

Programming Language/C#

[C#]정규표현식 사용하기

금백조 2021. 6. 26. 13:03
반응형

서론

 

엑셀의 셀에서 개행된 문자를 복사하여 프로그램의 그리드에 붙여 넣기 하면 문자 맨 앞에는 "(큰따옴표)가 문자 맨 뒤에는 "(큰따옴표) + \r\n(개행 문자)가 붙는 현상을 해결해야 했습니다. 그래서 정규표현식을 떠올렸고 이를 통해 해결했습니다. 따라서 이번 글에서는 문제 해결 과정 속에서 알게 된 C#에서 정규표현식 사용 방법에 대해 알아보겠습니다.

 


 

본론

 

구문 형식

 

[namespace]

 

using System.Text.RegularExpressions;

 

[정규표현식 선언]

 

string strConstantParttern = "^\"|\"$|\"\r\n$";//string 으로 선언
Regex strVariableParttern = new Regex("^\"|\"$|\"\r\n$");//Regex 생성자로 선언

 

 

[Regex 주요 속성]

 

Matches 정규표현식에 일치하는 input 문자들을 GroupCollection에 담아 리턴합니다.
(Groups[1]에 일치 문자열이 담깁니다.)
IsMatch 정규표현식에 일치하는 input 문자를 찾을 경우 true, 못 찾을 경우 false를 반환합니다.
input 정규표현식에 일치하는 input 문자들을 특정 문자로 변환하여 string 객체를 리턴합니다.
input 객체 자체가 변경되는게 아니므로 string 변수를 선언하여 객체를 반환받아야 합니다.

 

[예제]

 

using System;
using System.Text.RegularExpressions;

namespace RegularExpressionExample
{
    class Program
    {
        static void Main(string[] args)
        {
            RegPartternExample1();
            RegPartternExample2();
            RegPartternExample3();
        }

        static void RegPartternExample1()
        {
            Console.WriteLine("예제1");
            //앞뒤 쌍따옴표, 마지막 개행 제거하는 정규표현식
            string pattern = "^\"|\"$|\"\r\n$";
            string input = "\"개행된\r\n문자\r\n입니다.\"\r\n";
            Console.WriteLine("변경전");
            Console.WriteLine(input);
            Console.WriteLine();

            Console.WriteLine("일치 여부 확인");
            Console.WriteLine(Regex.IsMatch(input, pattern));
            Console.WriteLine();

            input = Regex.Replace(input, pattern, string.Empty);
            Console.WriteLine("변경후");
            Console.WriteLine(input);
            Console.WriteLine();
        }

        static void RegPartternExample2()
        {
            Console.WriteLine("예제2");
            string str = "나열된 단어1 단어2 단어3 단어4 입니다.";
            //단어별로 구분하는 정규표현식
            Regex regex = new Regex(@"\b(\w+?)\b", RegexOptions.IgnoreCase);

            foreach (Match m in regex.Matches(str))
            {
                Group g = m.Groups[1];
                Console.WriteLine("{0}:{1}", g.Index, g.Value);//시작 인덱스, 값 출력
            }
        }

        static void RegPartternExample3()
        {
            Console.WriteLine("예제3");
            string[] strArray = new string[5] { "file file1.txt", "file.file2.jpg", 
                                                "file3.png", "file4.dll", "file5.jpeg" };
            //파일명 확장자가 이미지인지 체크하는 정규표현식
            Regex regex = new Regex(@"\.(jpeg|gif|png|jpg)$", RegexOptions.IgnoreCase);

            foreach (string str in strArray)
            {
                Console.WriteLine("파일이름:{0}, 이미지여부:{1}", str, regex.IsMatch(str));
            }
        }
    }
}

 

[실행 결과]

 


 

결론

 

정규표현식을 잘 사용하면 복잡하게 코드로 구현해야 하는 것을 정규식 1줄로 간단히 표현할 수 있어서 매우 좋은 것 같습니다. 앞으로도 필요할 때마다 정규식을 적극적으로 활용해야겠습니다.

 

Reference

 

[.NET 정규식]

https://docs.microsoft.com/ko-kr/dotnet/standard/base-types/regular-expressions

 

.NET 정규식

.NET에서 정규식을 사용하여 특정 문자 패턴을 찾고, 텍스트의 유효성을 검사하고, 텍스트 부분 문자열로 작업하고, 추출된 문자열을 컬렉션에 추가합니다.

docs.microsoft.com

 

반응형