Come faccio a creare gruppi con nomi in C# usando le espressioni regolari, ed è una buona pratica?Gruppi denominati con espressioni regolari: buono o cattivo?
Grazie in anticipo.
Come faccio a creare gruppi con nomi in C# usando le espressioni regolari, ed è una buona pratica?Gruppi denominati con espressioni regolari: buono o cattivo?
Grazie in anticipo.
dare al gruppo un nome di tag:
(?<TagName>.*)
Sono assolutamente che questo sia buona pratica. Considera cosa succede quando cambi l'espressione regolare. Se si utilizzano gli indici per estrarre i dati, l'ordine di questi gruppi potrebbe cambiare. Chiamandoli, specifichi esattamente i dati che pensi che il gruppo contenga, quindi è anche una forma di autocomposizione.
gruppi di acquisizione denominati sono belle, di solito tho con semplice regex di utilizzare il gruppo di acquisizione numerica è probabilmente più streamliney, alcuni suggerimenti qui:
Grazie mille per la risposta, e per il collegamento. – Payne
Come altri hanno fatto notare la sintassi è (?<GroupName>....)
.
Ecco un esempio che illustra come creare un gruppo chiamato Key
e un gruppo chiamato Value
, e altrettanto importante (ma spesso dimenticato) - come estrarre i gruppi per nome dall'oggetto partita risultante:
string s = "foo=bar/baz=qux";
Regex regex = new Regex(@"(?<Key>\w+)=(?<Value>\w+)");
foreach (Match match in regex.Matches(s))
{
Console.WriteLine("Key = {0}, Value = {1}",
match.Groups["Key"].Value,
match.Groups["Value"].Value);
}
Normalmente non utilizzerei i gruppi denominati per espressioni molto semplici, ad esempio se esiste un solo gruppo.
Per espressioni regolari più complesse con molti gruppi contenenti espressioni complesse, sarebbe probabilmente una buona idea utilizzare i gruppi denominati. D'altra parte, se la tua espressione regolare è così complicata da doverlo fare, è essere una buona idea per vedere se è possibile risolvere il problema in un altro modo, o dividerlo in passi più piccoli, più semplici .
La sintassi alternativa è '(? 'TagName'. *)'. –
Grazie mille per la risposta. Non so perché pensavo che sarebbe stato male. – Payne