Capita spesso di dover lavorare con elenchi di contatti contenenti indirizzi email e fra questi ve ne sono di validi, errati o nulli. Come fare per estrapolare rapidamente solo le righe contenenti email errate oppure effettuare un ordinamento per cognome ma che rispetti il raggruppamento :
1. email corrette
2. email errate
3. email vuote
Ci sono diverse soluzioni e tutte piuttosto semplici, ma tramite LINQ e Regex tutto diventa semplicissimo.
La chiave per risolvere il problema è l'utilizzo combinato della giusta regular expression con il metodo Where di LINQ
Ipotizziamo di lavorare con una lista di oggetti Persona con property Nome, Cognome e Email.
Il primo passo è definire il pattern che discrimini fra email corrette e non:
Dim pattern As String = "^[\w\-\.]*[\w\.]\@[\w\.]*[\w\-\.]+[\w\-]+[\w]\.+[\w]+[\w $]"
A questo punto, potendo utilizzare la funzione Match della classe Regex in combinazione con il metodo Where di LINQ possiamo ottenere:
'elenco degli indirizzi email validi Dim l1 = From p In Contatti _ Where Regex.Match(p.Email, pattern).Success _ Order By p.Cognome Select p 'elenco degli indirizzi email errati ma non vuoti Dim l2 = From p In Contatti _ Where Regex.Match(p.Email, pattern).Success = False _ And p.Email.Length > 0 _ Order By p.Cognome Select p 'elenco degli indirizzi email vuoti Dim l3 = From p In Contatti _ Where p.Email.Length = 0 _ Order By p.Cognome Select p 'concatenamento degli elenco di indirizzi email validi, 'errati e nulli ordinati al loro interno per cognome Dim ltot = l1.Concat(l2).Concat(l3)
E' importante comunque sottolineare che il concetto di validità di una email qui considerato è puramente sintattico e dipende dal pattern più o meno restrittivo che si utilizza all'interno della regular expression.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
I più letti di oggi
- Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste
- Utilizzare StartsWith ed EndsWith con Span
- Utilizzare l nesting nativo dei CSS
- Microsoft lancia il nuovo tool gratuito 'ASP.NET Web Matrix Project'
- Managed deployment strategy in Azure DevOps
- Forzare l'apertura di un file fuori dal browser
- Configurare e gestire sidecar container in Azure App Service