Voglio estrarre solo quelle parole tra virgolette. Quindi, se il contenuto è:Regex: C# estratto il testo tra virgolette
"Vorresti ricevere risposte alle tue" domande "inviate via email?
La risposta deve essere
- voi
- domande
Voglio estrarre solo quelle parole tra virgolette. Quindi, se il contenuto è:Regex: C# estratto il testo tra virgolette
"Vorresti ricevere risposte alle tue" domande "inviate via email?
La risposta deve essere
Prova questo regex
:
\"[^\"]*\"
o
\".*?\"
spiegare:
[^ character_group ]
Negazione: corrisponde a qualsiasi singolo carattere che non è in character_group.
*?
corrispondente all'elemento precedente zero o più volte, ma il minor numero di volte possibile.
e un codice di esempio:
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();
in base alla risposta @Ria s':
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());
}
}
L'output è:
"you"
"questions"
È possibile utilizzare string.TrimStart() e string.TrimEnd() per rimuovere le virgolette doppie se non lo si desidera.
Mi piacciono le soluzioni regex. Si potrebbe anche pensare a qualcosa di simile
string str = "Would \"you\" like to have responses to your \"questions\" sent to you via email?";
var stringArray = str.Split('"');
poi prendere la odd
elementi dell'array.Se si utilizza LINQ, si può fare in questo modo:
var stringArray = str.Split('"').Where((item, index) => index % 2 != 0);
Questa ruba anche il Regex da @Ria, ma consente di ottenere loro in una matrice in cui è quindi rimuovere le virgolette:
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("\"", ""));
}
avevo bisogno di fare questo in C# per il parsing CSV e nessuno di questi ha lavorato per me, così sono arrivato fino a questo:
\s*(?:(?:(['"])(?<value>(?:\\\1|[^\1])*?)\1)|(?<value>[^'",]+?))\s*(?:,|$)
Ciò analizzare fuori un campo con o senza virgolette e si escludono le citazioni dal valore pur mantenendo incorporato q uote e virgole. <value>
contiene il valore del campo analizzato. Senza utilizzare i gruppi con nome, il gruppo 2 o 3 contiene il valore.
Esistono modi migliori e più efficienti per eseguire l'analisi CSV e questo non sarà efficace nell'individuare input non validi. Ma se puoi essere sicuro del tuo formato di input e delle prestazioni non è un problema, questo potrebbe funzionare per te.
Ti stai aspettando citazioni sfuggite all'interno delle stringhe quotate? Come in "I am" 5'7 \ "" tall'? –