Maison >Java >javaDidacticiel >Comment diviser une chaîne à l'aide d'espaces tout en ignorant les espaces entre guillemets à l'aide de Regex ?

Comment diviser une chaîne à l'aide d'espaces tout en ignorant les espaces entre guillemets à l'aide de Regex ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-16 17:25:15426parcourir

How to Split a String Using Spaces While Ignoring Spaces Within Quotes Using Regex?

Regex pour diviser des chaînes à l'aide d'espaces

Lorsque nous travaillons avec des chaînes, nous devons souvent les diviser en mots individuels à des fins d'analyse ou de traitement. Cependant, les espaces dans les textes cités (par exemple « Ceci est une chaîne ») ne doivent pas être considérés comme des séparateurs. Les expressions régulières (Regex) offrent un moyen puissant de gérer des tâches de fractionnement aussi complexes.

Question :

Créez une expression Regex pour diviser une chaîne à l'aide d'espaces, sans tenir compte des espaces entourés. en simple ou double guillemets.

Exemple :

Entrée : "Il s'agit d'une chaîne qui "sera" mise en surbrillance lorsque votre "expression régulière" correspond à quelque chose."

Désiré Sortie :

This
is
a
string
that
will be
highlighted
when
your
regular expression
matches
something.

Réponse :

Bien que l'expression fournie de (?!") ne se divise pas correctement, une expression Regex complète peut être formulée comme suit :

Cette expression capture effectivement deux types d'éléments :

  • Non cité Mots : [^s"'] correspond à des séquences de caractères sans espaces ni guillemets.
  • Texte cité :

    • /"( [^"]*)"/ correspond au texte entre guillemets doubles, à l'exclusion du quotes.
    • /'([^']*)'/ correspond de la même manière au texte entre guillemets simples, à l'exclusion des guillemets.

Implémentation Java :

Le code Java suivant illustre comment appliquer cette Regex pour diviser le string :

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexSplitter {

    public static void main(String[] args) {
        String subjectString = "This is a string that \"will be\" highlighted when your 'regular expression' matches something.";

        // Pattern that matches unquoted words, quoted texts, and the capturing groups
        Pattern regex = Pattern.compile("[^\s\"']+|\"([^\"]*)\"|'([^']*)'");
        Matcher regexMatcher = regex.matcher(subjectString);

        // List to store the split words
        List<String> matchList = new ArrayList<>();

        while (regexMatcher.find()) {
            // Check for capturing groups to exclude quotes
            if (regexMatcher.group(1) != null) {
                // Add double-quoted string without the quotes
                matchList.add(regexMatcher.group(1));
            } else if (regexMatcher.group(2) != null) {
                // Add single-quoted string without the quotes
                matchList.add(regexMatcher.group(2));
            } else {
                // Add unquoted word
                matchList.add(regexMatcher.group());
            }
        }

        // Display the split words
        for (String word : matchList) {
            System.out.println(word);
        }
    }
}

Sortie :

This
is
a
string
that
will be
highlighted
when
your
regular expression
matches
something

Cette discussion améliorée clarifie le problème et fournit une expression Regex plus précise et complète, ainsi qu'une implémentation Java détaillée pour démontrer son utilisation.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn