>Java >java지도 시간 >쉼표로 구분된 문자열을 포함된 따옴표로 분할하는 방법은 무엇입니까?

쉼표로 구분된 문자열을 포함된 따옴표로 분할하는 방법은 무엇입니까?

DDD
DDD원래의
2024-12-07 08:11:11193검색

How to Split Comma-Delimited Strings with Embedded Quotes?

포함된 따옴표로 구분된 텍스트 분할

쉼표로 구분된 형식을 따르는 텍스트를 구문 분석할 때 포함된 따옴표를 처리하는 것이 어려울 수 있습니다. 이 문서에서는 이 문제를 다루면서 따옴표로 묶인 텍스트의 무결성을 유지하면서 쉼표로 문자열을 분할하는 솔루션을 제공합니다.

다음 텍스트를 고려하세요.

123,test,444,"don't split, this",more test,1

기본 문자열 사용. Split(",") 메서드는 다음과 같은 결과를 산출합니다.

123
test
444
"don't split
 this"
more test
1

그러나 목표는 인용된 텍스트를 유지하는 것입니다. 단일 엔터티로:

123
test
444
"don't split, this"
more test
1

이를 달성하기 위해 정규식 기반 솔루션을 사용합니다.

str.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");

이 표현식은 뒤에 짝수가 오는 쉼표를 기준으로 문자열을 분할합니다. 큰따옴표의 수. 이렇게 하면 인용된 텍스트 안의 쉼표가 구분 기호로 무시됩니다.

정규 표현식 이해:

  • ,(?=( - 쉼표 뒤에 오는 쉼표와 일치합니다. 미리보기 주장.
  • (?:[^"]*"[^"]*")*: 다음 인용 텍스트 패턴의 0개 이상의 반복과 일치합니다: "[^"]*"(작은 따옴표 뒤에 따옴표가 아닌 문자가 오고 또 다른 따옴표가 옵니다).
  • [^"]*: 0과 일치합니다. 따옴표 앞에 따옴표가 아닌 문자가 하나 이상 있습니다.
  • $[^"]*$: 따옴표가 아닌 문자를 일치시킨 후 문자열 끝에 도달했음을 확인합니다.

대체 구문:

가독성을 위해 (?x) 수정자를 사용하여 정규식을 여러 줄로 나눌 수도 있습니다.

String[] arr = str.split("(?x)   " + 
                     ",          " +   // Split on comma
                     "(?=        " +   // Followed by
                     "  (?:      " +   // Start a non-capture group
                     "    [^\"]* " +   // 0 or more non-quote characters
                     "    \"     " +   // 1 quote
                     "    [^\"]* " +   // 0 or more non-quote characters
                     "    \"     " +   // 1 quote
                     "  )*       " +   // 0 or more repetition of non-capture group (multiple of 2 quotes will be even)
                     "  [^\"]*   " +   // Finally 0 or more non-quotes
                     "  $        " +   // Till the end  (This is necessary, else every comma will satisfy the condition)
                     ")          "     // End look-ahead
                         );

이 접근 방식을 사용하면 쉼표와 포함된 따옴표를 모두 고려하여 구분된 텍스트를 정확하게 분할할 수 있습니다.

위 내용은 쉼표로 구분된 문자열을 포함된 따옴표로 분할하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.