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
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();
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.
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);
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("\"", ""));
}
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
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.