Il codice seguente eseguirà una corrispondenza e costruirà una stringa di sostituzione in base alla raccolta groupValues. Questa raccolta specifica un indice di gruppo e il testo per sostituire il suo valore con.
A differenza di altre soluzioni, non richiede che l'intera partita sia contenuta in gruppi, ma solo le parti della corrispondenza che si desidera avere nei gruppi.
public static string ReplaceGroups(Match match, Dictionary<int, string> groupValues)
{
StringBuilder result = new StringBuilder();
int currentIndex = 0;
int offset = 0;
foreach (KeyValuePair<int, string> replaceGroup in groupValues.OrderBy(x => x.Key))
{
Group group = match.Groups[replaceGroup.Key];
if (currentIndex < group.Index)
{
result.Append(match.Value.Substring(currentIndex, group.Index - match.Index - currentIndex));
}
result.Append(replaceGroup.Value);
offset += replaceGroup.Value.Length - group.Length;
currentIndex = group.Index - match.Index + group.Length;
}
return result.ToString();
}
fonte
2017-07-20 00:03:13
@AlanDert - Questo è probabilmente un problema con la tua espressione regolare. [Ecco un esempio di questo codice in esecuzione online.] (Http://rextester.com/GFFO18933) Potresti voler provare a modificare il tuo modello regolare. –
Un problema con questa soluzione è che è necessario che l'intera corrispondenza sia contenuta nei gruppi, mentre è logico avere solo parti specifiche di una corrispondenza in Gruppi per consentire un accesso più facile alle parti rilevanti. –
@MrUniverse - Se ricordo bene, è quello che stavo ottenendo con il mio addendum sui lookaround a larghezza zero. –