C# - 정규 표현식: 초보자 가이드

안녕하세요, 미래의 코딩 슈퍼스타! ? 정규 표현식(RegEx)의 세계로 흥미로운 여정을 떠나 준비되셨나요? 코드를 한 줄도 적어보지 않았다면 걱정하지 마세요 - 저는 이 모험을 단계별로 안내해드릴 거예요. 시작해 볼까요!

C# - Regular Expressions

정규 표현식이란?

정규 표현식에 들어가기 전에, 정규 표현식이 무엇인지 이해해 보겠습니다. 상상해 보세요. 바다 같은 텍스트 속에서 특정 패턴을 찾는 탐정 ?️‍♀️. 정규 표현식은 당신의 放大鏡이 되어, 패턴을 기반으로 텍스트를 검색하고, 일치시키고, 조작할 수 있게 해줍니다. 멋지죠?

정규 표현식 정의를 위한 구조

이제 이 강력한 패턴을 만들기 위해 사용할 기본 블록을 살펴보겠습니다. 이 것들은 우리의 RegEx 세계의 LEGO 조각들입니다!

구조 설명 예시
. 줄 바꿈을 제외한 모든 단일 문자와 일치 a.c는 "abc", "a1c", "a@c" 등과 일치
* 전자의 문자가 0번 이상 반복되는 것과 일치 ab*c는 "ac", "abc", "abbc", "abbbc" 등과 일치
+ 전자의 문자가 1번 이상 반복되는 것과 일치 ab+c는 "abc", "abbc", "abbbc"와 일치하지만 "ac"는 아님
? 전자의 문자를 선택 사항으로 만듬 colou?r는 "color"와 "colour" 모두와 일치
^ 줄의 시작과 일치 ^Hello는 "Hello World"와 일치하지만 "Say Hello"는 아님
$ 줄의 끝과 일치 World$는 "Hello World"와 일치하지만 "World Cup"는 아님
[ ] 집합에서 단일 문자와 일치 [aeiou]는 모든 모음과 일치
[^ ] 집합에 없는 단일 문자와 일치 [^aeiou]는 모든 자음과 일치
( ) 문자를 그룹화 (ab)+는 "ab", "abab", "ababab" 등과 일치

이게 당혹스러우시다면 걱정하지 마세요! 곧 이这些东西들을 실제로 사용해보겠습니다!

Regex 클래스

C#에서는 Regex 클래스를 사용하여 정규 표현식을 처리합니다. 이 클래스는 패턴 일치에 대한 우리의瑞士軍刀 ?입니다. 그것을 어떻게 사용하는지 보겠습니다!

예제 1: 간단한 패턴 찾기

먼저 간단한 것으로 시작해 보겠습니다. 이메일 주소가 유효한지 확인하는 프로그램을 만들고 있다고 상상해 보세요.

using System;
using System.Text.RegularExpressions;

class Program
{
static void Main()
{
string email = "[email protected]";
string pattern = @"@.*\.";

Regex regex = new Regex(pattern);
Match match = regex.Match(email);

if (match.Success)
{
Console.WriteLine("유효한 이메일 주소입니다!");
}
else
{
Console.WriteLine("유효하지 않은 이메일 주소입니다!");
}
}
}

이 예제에서:

  • 우리는 패턴 @"@.*\."Regex 객체를 만듭니다.
  • 이 패턴은 @ 기호 뒤에 어떤 문자든(.*), 그리고 점(\.)을 찾습니다.
  • Match 메서드를 사용하여 이 패턴을 이메일 문자열에서 찾습니다.
  • 성공하면 이메일을 유효하다고 간주합니다.

이는 매우 간단한 확인입니다. 실제 이메일 검증은 훨씬 더 복잡합니다!

예제 2: 텍스트 변경

이제 채팅 앱을 만들고, "LOL"을 모두 "laugh out loud"로 변경하고 싶다고 상상해 보세요. RegEx를 구원하다!

using System;
using System.Text.RegularExpressions;

class Program
{
static void Main()
{
string input = "OMG! Did you see that? LOL! I can't believe it. LOL";
string pattern = @"\bLOL\b";
string replacement = "laugh out loud";

string result = Regex.Replace(input, pattern, replacement);

Console.WriteLine(result);
}
}

여기서 무엇이 일어나고 있는지 설명하자면:

  • 우리는 \b를 사용하여 단어 경계를 일치시킵니다. 이 这样使我们只替换 "LOL" 当它是完整单词时,而不是单词的一部分。
  • Regex.Replace는 모든 일치를 찾아 변경합니다.

출력: "OMG! Did you see that? laugh out loud! I can't believe it. laugh out loud"

예제 3: 정보 추출

마지막으로, 트윗에서 모든 해시태그를 추출해 보겠습니다. 소셜 미디어 앱의 트렌딩 주제 기능을 만들 때 이를 사용할 수 있습니다.

using System;
using System.Text.RegularExpressions;

class Program
{
static void Main()
{
string tweet = "Just finished my #CSharp course! #Coding #LearningToCode";
string pattern = @"#\w+";

MatchCollection matches = Regex.Matches(tweet, pattern);

Console.WriteLine("Found hashtags:");
foreach (Match match in matches)
{
Console.WriteLine(match.Value);
}
}
}

이를 해부해 보면:

  • 우리의 패턴 #\w+는 # 뒤에 하나 이상의 단어 문자와 일치합니다.
  • Regex.Matches는 문자열에서 패턴의 모든 발생을 찾습니다.
  • 그런 다음, 우리는 일치를 순회하면서 각 해시태그를 인쇄합니다.

출력:

Found hashtags:
#CSharp
#Coding
#LearningToCode

결론

축하합니다! ? 당신은 C#의 정규 표현식 세계로 첫 걸음을 뗐습니다. 우리는 기본적인 것부터 간단한 패턴 일치, 텍스트 변경, 정보 추출까지 다루었습니다. RegEx는 강력한 도구지만, 초능력처럼, 이를 습득하기 위해서는 연습이 필요합니다.

처음에는 어려워 보일 수 있지만, 제가 처음 정규 표현식을 가르쳤을 때, 학생 중 한 명이 그것이 마치 고양이가 키보드를 걸어 다녔던 것처럼 보인다고 말했습니다! 하지만 연습을 통해 그는 정규 표현식 마법사가 되었습니다. 당신도 될 수 있습니다!

계속 실험하고, 다른 패턴을 시도하고, 곧 당신도 사 haystack에서 바늘을 찾는 프로가 될 것입니다. 행복한 코딩! ??

Credits: Image by storyset