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

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

DDD
풀어 주다: 2024-12-07 08:11:11
원래의
192명이 탐색했습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿