248 votes

Comment extraire une chaîne de texte qui se trouve entre deux (parenthèses) en utilisant .NET ?

J'ai une chaîne de caractères "Nom d'utilisateur (ventes)" et je veux extraire le texte entre les parenthèses, comment dois-je faire ? Je pense à une sous-chaîne, mais je n'arrive pas à trouver comment lire jusqu'à la parenthèse fermante, la longueur du texte varie.

498voto

Jelly Ama Points 820

Si vous souhaitez rester à l'écart des expressions régulières, la méthode la plus simple à laquelle je pense est la suivante :

string input = "User name (sales)";
string output = input.Split(new char[] { '(', ')' })[1];

463voto

Diadistis Points 6892

Une façon très simple de le faire est d'utiliser des expressions régulières :

Regex.Match("User name (sales)", @"\(([^)]*)\)").Groups[1].Value

En réponse au commentaire (très drôle), voici la même Regex avec quelques explications :

\(             # Escaped parenthesis, means "starts with a '(' character"
    (          # Parentheses in a regex mean "put (capture) the stuff 
               #     in between into the Groups array" 
       [^)]    # Any character that is not a ')' character
       *       # Zero or more occurrences of the aforementioned "non ')' char"
    )          # Close the capturing group
\)             # "Ends with a ')' character"

91voto

Ross Goddard Points 2565

En supposant que vous n'ayez qu'une seule paire de parenthèses.

string s = "User name (sales)";
int start = s.IndexOf("(") + 1;
int end = s.IndexOf(")", start);
string result = s.Substring(start, end - start);

25voto

artfulhacker Points 1731

Utilisez cette fonction :

public string GetSubstringByString(string a, string b, string c)
    {
        return c.Substring((c.IndexOf(a) + a.Length), (c.IndexOf(b) - c.IndexOf(a) - a.Length));
    }

et voici l'utilisation :

GetSubstringByString("(", ")", "User name (sales)")

et la sortie serait :

sales

17voto

Jennifer Points 2603

Les expressions régulières pourraient être le meilleur outil ici. Si vous n'êtes pas familier avec elles, je vous recommande d'installer Expresso - un excellent petit outil de regex.

Quelque chose comme :

        Regex regex = new Regex("\\((?<TextInsideBrackets>\\w+)\\)");
        string incomingValue = "Username (sales)";
        string insideBrackets = null;
        Match match = regex.Match(incomingValue);
        if(match.Success)
        {
            insideBrackets = match.Groups["TextInsideBrackets"].Value;
        }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X