Ho una stringa che contiene diversi commenti html. Devo contare le corrispondenze uniche di un'espressione.Come posso ottenere una corrispondenza regolare per essere aggiunta una sola volta alla raccolta delle partite?
Ad esempio, la stringa potrebbe essere:
var teststring = "<!--X1-->Hi<!--X1-->there<!--X2-->";
Attualmente uso questo per ottenere le partite:
var regex = new Regex("<!--X.-->");
var matches = regex.Matches(teststring);
I risultati di questo è 3 partite. Tuttavia, mi piacerebbe avere solo 2 partite poiché ci sono solo due partite uniche.
So che probabilmente posso scorrere il MatchCollection risultante e rimuovere il Match aggiuntivo, ma spero che esista una soluzione più elegante.
Chiarimento: la stringa di esempio è notevolmente semplificata rispetto a ciò che viene effettivamente utilizzato. Ci può essere facilmente un X8 o X9, e ci sono probabilmente dozzine di ciascuno nella stringa.
Mi è piaciuta questa idea ma purtroppo il i risultati non sono quelli che ci si aspettava. Nel mio test di unità (che ha una stringa molto più grande) ho ottenuto 8 risultati quando avrei dovuto ricevere 4. Non sono sicuro quale sia la differenza tra RegexBuddy e quello che sto usando. :( –
Inoltre, ho provato a usare Distinct() ma MatchCollection, anche se deriva da IEnumerable, non sembra riconoscerlo –
qual è la stringa più grande? Su MatchCollection è molto probabile che tu debba usare var stuff = theMatchCollection.OfType() .Select (m => m.Value) .Distinct(), o qualcosa di simile. –
Svish