C# 프로그래밍에서 문자열에 섞여 있는 숫자만 골라내야 하는 경우가 자주 발생합니다. 이럴 때 정규식(Regular Expression)이나 Char.IsDigit() 메서드를 활용하면 손쉽게 해결할 수 있습니다. 이 글에서는 두 가지 방법을 예제 코드와 함께 자세히 살펴보겠습니다.
정규식(Regular Expression)이란?
정규식은 입력 텍스트와 매칭되는 패턴(pattern)을 의미합니다. .NET 프레임워크는 정규식 엔진을 내장하고 있어 이러한 패턴 매칭을 기본적으로 지원합니다. 하나의 패턴은 하나 이상의 문자 리터럴, 연산자 또는 구성 요소로 이루어집니다.
정규식에서 자주 사용되는 기본 메타문자는 다음과 같습니다.
* = 0개 이상
? = 0개 또는 1개
^ = 부정(not)
[] = 범위 지정
^ 기호는 부정 조건을 지정할 때 사용하며, [] 대괄호 안에는 0-9, a-z, A-Z처럼 범위 값을 넣어 특정 문자 그룹을 표현할 수 있습니다.
방법 1: Char.IsDigit() 사용하기
예제 코드
using System;
namespace DemoApplication{
public class Program{
static void Main(string[] args){
string str1 = "123string456";
string str2 = string.Empty;
int val = 0;
Console.WriteLine($"String with number: {str1}");
for (int i = 0; i < str1.Length; i++){
if (Char.IsDigit(str1[i]))
str2 += str1[i];
}
if (str2.Length > 0)
val = int.Parse(str2);
Console.WriteLine($"Extracted Number: {val}");
Console.ReadLine();
}
}
}
실행 결과
String with number: 123string456
Extracted Number: 123456
위 예제에서는 str1 문자열의 모든 문자를 한 글자씩 반복하면서 각 문자가 숫자인지 확인합니다. Char.IsDigit() 메서드는 해당 문자가 숫자인지 검증하고, 숫자라면 새로운 문자열에 차례로 추가합니다. 마지막에는 이 문자열을 int.Parse()로 변환하여 최종 숫자 값을 얻습니다.
방법 2: Regex(정규식) 사용하기
예제 코드
using System;
using System.Text.RegularExpressions;
namespace DemoApplication{
public class Program{
static void Main(string[] args){
string str1 = "123string456";
string str2 = string.Empty;
int val = 0;
Console.WriteLine($"String with number: {str1}");
var matches = Regex.Matches(str1, @"\d+");
foreach(var match in matches){
str2 += match;
}
val = int.Parse(str2);
Console.WriteLine($"Extracted Number: {val}");
Console.ReadLine();
}
}
}
실행 결과
String with number: 123string456
Extracted Number: 123456
위 예제에서는 정규식 패턴 \d+를 사용하여 str1 문자열에서 숫자만 추출합니다. \d+는 '숫자가 한 개 이상 연속된 부분'을 의미하므로, 문자열 사이사이에 있는 숫자 덩어리들을 한 번에 모두 찾아낼 수 있습니다.
두 방법 비교 및 정리
간단한 문자열 처리에는 Char.IsDigit() 루프 방식이 직관적이고 추가 네임스페이스 참조가 필요 없다는 장점이 있습니다. 반면, 복잡한 패턴 매칭이 필요하거나 여러 개의 숫자 그룹을 개별적으로 다뤄야 할 때는 Regex가 더욱 강력하고 유연합니다. 처리하려는 데이터의 형태와 요구 사항에 맞춰 적절한 방법을 선택하는 것이 좋습니다.