[C# 문법] C# 정규표현식 - 일치하는 모든 문자열 찾기

소개

  • 안녕하세요. 오늘은 C# 문법에서 정규 표현식에 대해서 알려 드리려고 합니다.
  • 그 중에서도 정규 표현식을 이용해서 일치하는 문자열을 모두 찾는 방법에 대해서 알려 드리려고 합니다.
  • 정규 표현식을 사용하지 않고도 하드코딩을 통해서 문자열을 찾을 수 있겠지만, 정규 표현식을 사용하게 되면 코드 한줄로 원하는 결과값을 빠르게 얻을 수 있기 때문에 한번씩을 따라 해보시면서 정규 표현식에 친숙해지는 것을 추천 드리도록 하겠습니다.
  • 정규 표현식에서 일치하는 문자열을 모두 찾는 방법은 Regex 클래스에 있는 Matches 메서드를 사용하면 됩니다.
  • 어떻게 사용하는지에 대해서 예제 코드를 통해서 보여 드리도록 하겠습니다.

예제코드

using System;
using System.Text.RegularExpressions;

namespace ConsoleApp7
{
    static class Program
    {
        static void Main(string[] args)
        {
            var text = "Hello, 안녕하세요. 내 이름은 범범조조 입니다. beombeomjojo, hello BeomBeomJoJo";
            var matches = Regex.Matches(text, @"[h|H]ello");

            // foreach 구문에서 var 형이 아니라 Match 형이라고 반드시 명시해야 합니다.
            foreach (Match item in matches)
            {
                Console.WriteLine($"Index = {item.Index} Length = {item.Length} Value = {item.Value}");
            }

            Console.WriteLine();
            Console.WriteLine();

            // NextMatch() 메서드를 이용할 수 도 있습니다.
            var text2 = "Hello, 안녕하세요. 내 이름은 범범조조 입니다. beombeomjojo, hello BeomBeomJoJo";
            Match match = Regex.Match(text, @"[h|H]ello");

            while(match.Success)
            {
                Console.WriteLine($"Index = {match.Index} Length = {match.Length} Value = {match.Value}");
                match = match.NextMatch();
            }
        }
    }
}

실행 결과

Index = 0 Length = 5 Value = Hello
Index = 44 Length = 5 Value = hello


Index = 0 Length = 5 Value = Hello
Index = 44 Length = 5 Value = hello
  • 위와 같이 Matches 메서드 혹은 Match 메서드에서 제공하는 NextMatch() 메서드를 통해서 정규 표현식을 통해서 일치하는 모든 문자열을 구할 수 있습니다.
  • Matches 메서드의 표현 방법을 LINQ로도 표현할 수 있습니다.

Matches 메서드 LINQ 예제코드

using System;
using System.Linq;
using System.Text.RegularExpressions;

namespace ConsoleApp7
{
    static class Program
    {
        static void Main(string[] args)
        {
            var text = "Hello, 안녕하세요. 내 이름은 범범조조 입니다. beombeomjojo, hello BeomBeomJoJo";
            var matches = Regex.Matches(text, @"[h|H]ello")
                               .Cast<Match>()
                               .OrderBy(x => x.Length);

            foreach (Match item in matches)
            {
                Console.WriteLine($"Index : {item.Index} Length : {item.Length} Value : {item.Value}");
            }
        }
    }
}

실행 결과

Index : 0 Length : 5 Value : Hello
Index : 44 Length : 5 Value : hello
  • 위와 같이 LINQ 구문을 이용해서 Matches 메서드를 사용할 수 있습니다.
728x90

이 글을 공유하기

댓글

Designed by JB FACTORY