Heim >Java >javaLernprogramm >Wie teile ich durch Kommas getrennten Text mit Anführungszeichen mithilfe regulärer Ausdrücke auf?

Wie teile ich durch Kommas getrennten Text mit Anführungszeichen mithilfe regulärer Ausdrücke auf?

Barbara Streisand
Barbara StreisandOriginal
2024-12-02 01:15:10519Durchsuche

How to Split Comma-Separated Text with Quotes Using Regular Expressions?

Durch Kommas getrennten Text mit Anführungszeichen aufteilen

In bestimmten Szenarien, in denen Textdaten durch Kommas getrennte Werte enthalten, ist es notwendig, die Daten aufzuteilen basierend auf Kommas. Es treten jedoch Herausforderungen auf, wenn die Daten Zeichenfolgen mit eingebetteten Kommas in Anführungszeichen enthalten.

Um dieses Problem zu beheben, besteht eine vielseitige Lösung darin, einen regulären Ausdruck zu verwenden, der speziell auf Kommas abzielt, die sich außerhalb von doppelten Anführungszeichen befinden:

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

Diese Regex zerlegen:

  • :, stellt das Zielkomma zwischen Daten dar Werte.
  • (?=...$) ist eine vorausschauende Behauptung, die angibt, dass auf das Komma der verbleibende Ausdruck folgen muss.
  • (?:[^"]*"[^"]*")* entspricht null oder mehr Wiederholungen von Paaren doppelter Anführungszeichen und stellt sicher, dass alle eingebetteten Kommas aus dem ausgeschlossen werden geteilt.
  • [^"]* entspricht allen Zeichen, die keine Anführungszeichen nach dem letzten doppelten Anführungszeichen oder dem Anfang der Zeichenfolge sind.

Alternativ kann das Dieselbe Regex kann mit dem Modifikator (?x) in ein besser lesbares Format geschrieben werden, wodurch mehrzeilige Ausdrücke verbessert werden können Lesbarkeit:

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
                         );

Diese Lösung löst effektiv das Problem der Aufteilung von durch Kommas getrenntem Text und bewahrt gleichzeitig die Integrität von Zeichenfolgen, die Kommas in doppelten Anführungszeichen enthalten.

Das obige ist der detaillierte Inhalt vonWie teile ich durch Kommas getrennten Text mit Anführungszeichen mithilfe regulärer Ausdrücke auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn