web-dev-qa-db-fra.com

Regex: C # extraire le texte entre guillemets

Je veux extraire uniquement ces mots entre guillemets doubles. Donc, si le contenu est:

Souhaitez-vous "recevoir" des réponses à vos "questions" par courrier électronique?

La réponse doit être 

  1. vous
  2. des questions
31
new_linux_user

Essayez ceci regex:

\"[^\"]*\"

ou 

\".*?\"

explique :

[^ character_group ] 

Negation: correspond à tout caractère ne faisant pas partie de character_group.

*?

Correspond à l'élément précédent zéro ou plusieurs fois, mais aussi peu de fois que possible. 

et un exemple de code:

foreach(Match match in Regex.Matches(inputString, "\"([^\"]*)\""))
    Console.WriteLine(match.ToString());

//or in LINQ
var result = from Match match in Regex.Matches(line, "\"([^\"]*)\"") 
             select match.ToString();
52
Ria

Basé sur la réponse de @Ria:

static void Main(string[] args)
{
    string str = "Would \"you\" like to have responses to your \"questions\" sent to you via email?";
    var reg = new Regex("\".*?\"");
    var matches = reg.Matches(str);
    foreach (var item in matches)
    {
        Console.WriteLine(item.ToString());
    }
}

La sortie est:

"you"
"questions"

Vous pouvez utiliser string.TrimStart () et string.TrimEnd () pour supprimer les guillemets si vous ne le souhaitez pas.

13
Edi Wang

J'aime les solutions de regex. Vous pourriez aussi penser à quelque chose comme ça

string str = "Would \"you\" like to have responses to your \"questions\" sent to you via email?";
var stringArray = str.Split('"');

Ensuite, prenez les éléments odd du tableau. Si vous utilisez linq, vous pouvez le faire comme ceci:

var stringArray = str.Split('"').Where((item, index) => index % 2 != 0);
8
bart s

Cela vole aussi le regex de @Ria, mais vous permet de les obtenir dans un tableau où vous supprimez les guillemets:

strText = "Would \"you\" like to have responses to your \"questions\" sent to you via email?";
MatchCollection mc = Regex.Matches(strText, "\"([^\"]*)\"");
for (int z=0; z < mc.Count; z++)
{
    Response.Write(mc[z].ToString().Replace("\"", ""));
}
2
vapcguy

Essayez ce (\"\w+\")+

Je vous suggère de télécharger Expresso

http://www.ultrapico.com/Expresso.htm

1
opewix

Je combine Regex et Trim:

const string searchString = "This is a \"search text\" and \"another text\" and not \"this text";
var collection = Regex.Matches(searchString, "\\\"(.*?)\\\"");
foreach (var item in collection)
{
    Console.WriteLine(item.ToString().Trim('"'));
}

Résultat:

search text
another text
0
Jared Chu

J'avais besoin de faire cela en C # pour analyser CSV et aucun de ceux-ci n'a fonctionné pour moi alors je suis venu avec ceci:

\s*(?:(?:(['"])(?<value>(?:\\\1|[^\1])*?)\1)|(?<value>[^'",]+?))\s*(?:,|$)

Cela analysera un champ avec ou sans guillemets et exclura les guillemets de la valeur tout en conservant les guillemets et les virgules incorporés. <value> contient la valeur du champ analysé. Sans utiliser les groupes nommés, le groupe 2 ou 3 contient la valeur.

Il existe des moyens plus efficaces et plus efficaces pour analyser le fichier CSV et celui-ci ne sera pas efficace pour identifier les entrées incorrectes. Mais si vous pouvez être sûr que votre format d’entrée et que vos performances ne sont pas un problème, cela pourrait fonctionner pour vous. 

0
sthames42