C# 프로그램 개발에서 문자열 치환은 빈번히 이루어지는 작업이며 문자열 치환하는 방법도 여러가지 방법으로 구현할 수 있습니다.
문자열에서 영문자만 가져오거나 숫자만 가져오거나 또는 영문자와 숫자만 가져오는 작업을 해 주어야 할 때가 있습니다. 반대로 영문자를 제거하거나 숫자를 제거하거나 영문자와 숫자를 모두 제거하는 작업을 해 주어야 하는 경우가 생기게 됩니다.
C#에서 Regex의 정규식을 사용하면 쉽게 원하는 문자만 남기고 나머지 문자는 제거할 수 있습니다.
이번 글에서는 C# 문자열에서 영문자만, 숫자만 또는 영문숫자만 남기고 나머지는 제거하는 3가지 방법 및 성능 비교 결과에 대해 알아보겠습니다.
▼ 아래에서 설명하는 세 가지 방법은 모두 label1의 텍스트 문자열에서 영문자와 숫자만 남겨 두고, 다른 문자는 모두 제거하고 label2의 텍스트로 지정하는 예제 입니다.
C#에서 Regex.Replace를 사용하여 문자열에서 원하는 문자만 남기고 나머지는 제거하는 방법
▶ 첫 번째 방법으로 Regex.Replace를 사용하여 불필요한 문자열을 제거하는 방법입니다.
using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string s = label1.Text;
// 방법1 – Regex.Replace() 사용
label2.Text = Regex.Replace(s, “[^a-zA-Z0-9]”, “”);
}
}
}
|
C#에서 RegexOptions.Compiled를 사용하여 문자열에서 원하는 문자만 남기고 나머지는 제거하는 방법
▶ 두 번째 방법으로 Regex의 RegexOptions.Compiled를 사용하여 불필요한 문자열을 제거하는 방법입니다.
using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string s = label1.Text;
// 방법2 – RegexOptions.Compiled 옵션 사용
Regex regex = new Regex(“[^a-zA-Z0-9]”, RegexOptions.Compiled);
label2.Text = regex.Replace(s, “”);
}
}
}
|
C#에서 반복문과 조건문을 사용하여 문자열에서 원하는 문자만 남기고 나머지는 제거하는 방법
▶ 세 번째 방법으로 반복문과 조건문을 사용하여 불필요한 문자열을 제거하는 방법입니다.
using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string s = label1.Text;
// 방법3 – 반복문 사용
StringBuilder sb = new StringBuilder();
foreach (var c in s)
{
if ((c >= ‘a’ && c <= ‘z’) || (c >= ‘A’ && c <= ‘Z’) || (c >= ‘0’ && c <= ‘9’))
sb.Append(c);
}
label2.Text = sb.ToString();
}
}
}
|
성능 비교 및 마무리
앞에서 설명한 3가지 방법은 결과가 모두 동일하게 불필요한 문자열을 제거하고 필요한 문자열만 가져오는 방법입니다.
동일한 결과를 보여주지만 실행하는데 있어 약간의 성능 차이가 발생합니다.
성능이 가장 좋은 방법부터 기술하자면 방법3-반복문 사용 > 방법2-RegexOptions.Comiled 사용 > Regex.Repace 사용 순입니다.
공교롭게도 Coding이 길어질수록 성능은 좋아졌습니다.
앞의 예제에서는 영문자와 숫자만 남기고 다른 문자는 제거하는 예제에 대한 정규식과 조건식 처리이지만 이 부분을 조금만 수정하면 반대의 결과를 얻거나 영문자만 또는 숫자만 또는 한글만 문자열에서 가져오도록 처리할 수도 있습니다.
※ 함께 읽으면 도움이 될 만한 다른 포스팅 글입니다.
이 글이 도움이 되었기를 바랍니다. ^-^