C# 문자열에서 영문자만, 숫자만 또는 영문숫자만 남기고 나머지는 제거하는 3가지 방법 및 성능 비교


C# 프로그램 개발에서 문자열 치환은 빈번히 이루어지는 작업이며 문자열 치환하는 방법도 여러가지 방법으로 구현할 수 있습니다.

문자열에서 영문자만 가져오거나 숫자만 가져오거나 또는 영문자와 숫자만 가져오는 작업을 해 주어야 할 때가 있습니다. 반대로 영문자를 제거하거나 숫자를 제거하거나 영문자와 숫자를 모두 제거하는 작업을 해 주어야 하는 경우가 생기게 됩니다.

C#에서 Regex의 정규식을 사용하면 쉽게 원하는 문자만 남기고 나머지 문자는 제거할 수 있습니다.

이번 글에서는 C# 문자열에서 영문자만, 숫자만 또는 영문숫자만 남기고 나머지는 제거하는 3가지 방법 및 성능 비교 결과에 대해 알아보겠습니다.

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이 길어질수록 성능은 좋아졌습니다.

앞의 예제에서는 영문자와 숫자만 남기고 다른 문자는 제거하는 예제에 대한 정규식과 조건식 처리이지만 이 부분을 조금만 수정하면 반대의 결과를 얻거나 영문자만 또는 숫자만 또는 한글만 문자열에서 가져오도록 처리할 수도 있습니다.





이 글이 도움이 되었기를 바랍니다. ^-^


답글 남기기