1. Regex.Split

C#의 Regex.Split 은 정규식 패턴을 기준으로 문자열을 잘라주는 메서드입니다.
string.Split(',')처럼 단순 문자 기준이 아니라,
“특정 패턴”에 맞을 때만 잘라주는 게 가능해요.

using System.Text.RegularExpressions;

string[] 결과 = Regex.Split(대상문자열, "정규식패턴");

2. CSV에 맞는 정규식 패턴

CSV에서 중요한 규칙:

  • 칼럼 구분자 = , (콤마)
  • 하지만 따옴표(" ") 안의 콤마는 무시해야 함

이걸 정규식으로 표현하면

,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)

3. 정규식 쪼개서 설명

  • ,
    → 일단 콤마를 찾는다.
  • (?= ... )
    → "lookahead" 문법. 이 위치에서 뒤쪽 조건이 만족할 때만 분리한다.
  • (?:[^\"]*\"[^\"]*\")*
    → "따옴표 쌍이 짝수 번 등장하는 패턴"
    (즉, 지금 콤마가 따옴표 안에 있지 않음을 보장)
  • [^\"]*$
    → 문자열 끝까지 남은 따옴표 개수가 짝수임을 보장.
    (열린 따옴표가 닫히지 않은 상태면 분리 금지)

전체적으로 말하면:
"따옴표 짝이 맞는 위치에서만 콤마를 분리하기" 

 

4. 코드 적용 예시

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string line = "\"2\",\"개발자\",\"W, A, S, D키를 이용하여 이동하세요\",\"left\",\"Admin\"";

        // ✅ 따옴표 안 콤마는 무시, 바깥 콤마만 split
        string[] values = Regex.Split(line, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");

        for (int i = 0; i < values.Length; i++)
        {
            Console.WriteLine($"{i}: {values[i].Trim('"')}");
        }
    }
}

 

5. 출력 결과

0: 2
1: 개발자
2: W, A, S, D키를 이용하여 이동하세요
3: left
4: Admin

+ Recent posts