none
trovare indirizzi email in un testo RRS feed

  • Domanda

  • salve a tutti. sapete come fare per cercare tutti gli indirizzi email in una textbox?? mi spiego meglio: ho una textbox con un testo, da questa voglio estrarre tutti gli indirizzi email per salvarli, premendo un bottone. ma come fare?
    martedì 22 giugno 2010 18:39

Risposte

  • Ciao

    probabilmente non hai incluso il Namespace  System.Text.RegularExpression ,prova il codice postato qui di seguito

    Imports System.Text.RegularExpressions
    
    Public Class Email
      Private Sub cmdSearch_Click(ByVal sender As Object, _
          ByVal e As EventArgs) Handles cmdSearch.Click
        'Clipboard è una proprietà di My.Computer, di tipo 
        'Microsoft.VisualBasic.MyService.ClipboardProxy: è un oggetto
        'singleton che rappresenta gli appunti. Questo codice 
        'ottiene il testo copiato nella clipboard con la funzione Copia
        Dim Text As String = Clipboard.GetText
        TextBox1.Text = "Salve, ragazzi! Il mio indirizzo è gianni90@email.it, scrivetemi presto," & _
                "attendo risposte per la mia domanda." & _
                "Ciao gianni90: ti devo ricordare che sarebbe meglio se non mettessi il" & _
                "tuo indirizzo in chiaro, poichè potrebbe essere più facilmente " & _
                "rintracciato. Prova invece ad usare questa forma: bartolo[at]prov[dot]com." & _
                "Ok(grazie!)" & _
                "Anzi, se invece vuoi, puoi usare anche questo: caio at miap dot net." & _
                "Vedrò di provare anche questo. Ma potrei anche fare delle combinazioni," & _
                "ad esempio ciack[at]email.fr oppure mark at prov[dot]it... O no?" & _
                "Certo, ottima idea."
    
        TextBox1.Copy()
        'Questa espressione deve ricercare tutti gli indirizzi e-mail
        'presenti nel testo, quindi aggiungerli alla lista:
        '\b(\w+) : la prima serie di caratteri costituisce l'username
        '  dell'utente. Ad esempio in gianni90@provider.it, è gianni90
        '
        '\s* : zero o più spazi. Può capitare che per non rendere 
        '  l'indirizzo reperibile, si usi questa sintassi:
        '  "gianni90 at provider dot it"
        '
        '(@|at|\[at\]) : uno qualsiasi tra @, at e [at], a seconda di
        '  come viene scritto l'indirizzo
        '
        '\s*(\w+)\s* : spazi per lo stesso discorso di prima, poi una
        '  serie di caratteri che indica il provider.
        '
        '(\.|dot|\[dot\]) : uno qualsiasi tra ., dot e [dot], a seconda
        '  di come viene scritto l'indirizzo
        '
        '(\w+) : l'ultima serie di caratteri è il dominio
        Dim Email As New Regex( _
        "\b(\w+)\s*(@|at|\[at\])\s*(\w+)\s*(\.|dot|\[dot\])(\w+)", _
        RegexOptions.Multiline)
    
        For Each M As Match In Email.Matches(Text)
          'Aggiungi un elemento alla lista e lo spunta
          'Attenzione! Bisogna tenere in conto che:
          '- il gruppo 0 rappresenta sempre tutta la sottostringa
          ' catturata e non uno dei raggrupamenti presenti
          '- anche i costruttori di alternanze sono gruppi, poichè
          ' racchiusi entro parentesi tonde
          'Perciò il risultato sarebbe
          '0 1    2  3    4  5
          ' gianni90[at]provider[dot]it
          'Quindi 1 è l'username, 3 il provider e 5 il dominio
          lstEmail.Items.Add(String.Format( _
          "{0}@{1}.{2}", M.Groups(1).Value, M.Groups(3).Value, _
          M.Groups(5).Value), True)
        Next
      End Sub
    
      Private Sub cmdSave_Click(ByVal sender As Object, _
        ByVal e As EventArgs) Handles cmdSave.Click
        'Salva gli indirizzi spuntati
        Dim Save As New SaveFileDialog
        Save.Filter = "File di testo|*.txt"
        If Save.ShowDialog = Windows.Forms.DialogResult.OK Then
          Dim Writer As New IO.StreamWriter(Save.FileName)
          'CheckedItems è una collezione in sola lettura che
          'restituisce tutti gli elementi spuntati
          For Each Item As String In lstEmail.CheckedItems
            Writer.WriteLine(Item)
          Next
          Writer.Close()
        End If
      End Sub
    End Class

    Includi due Button cmdSearch cmdSave , un CheckedListBox lstEmail

    e un TextBox TextBox1.

    Avrai allinteno del CheckedListBox lstEmail la lista email con segno di spunta e potrai salvarli

    in un file di testo.

    Ciao spero di aver capito cio' che ti sreve. 

    • Contrassegnato come risposta vincenzoperr martedì 22 giugno 2010 21:39
    martedì 22 giugno 2010 20:48
  • Ciao,

    se con il codice postato in precedenza riesci a ricavare gli indirizzi,

    in questo esempio ho popolato TextBox1 da codice, puoi utilizzare il codice di apertura di un file

    per pololare il TextBox che tio ho postato in precedenza quando non avevo compreso il tuo problema

    ovvero questo.

    Imports System.IO
    
    Public Class Form1
    
     Dim StrName As String
    
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
     'Imposta Proprietà Di OpenFileDialog1
     With OpenFileDialog1
      .Filter = "File di testo (*.txt)|*.txt|Tutti i file (*.*)|*.*"
      .FilterIndex = 1
      .InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments
      .Title = ""
     End With
    
     'Apre Il Controllo Open File Dialog
     If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
      Try
      'Salva Il File Path e Nome
      StrName = OpenFileDialog1.FileName
    
      'Dichiarazione Variabile Di Appoggio Lettura File Selezionato
      Dim fileContents As String
    
      'Assegnazione Nome File Da Vidualizzare
      fileContents = My.Computer.FileSystem.ReadAllText(StrName)
    
      'Visualizza Contenuto Del File All'Interno Del TextBox
      TextBox1.Text = fileContents
    
      If TextBox1.Visible = False Then
       TextBox1.Visible = True
      End If
    
      'Visualizza Il Nome Del File Sul Form
      Me.Text = StrName
    
    
      'Al Contrario Avvisa L'utente Con Un Messaggio
      Catch ex As Exception
      MessageBox.Show(ex.Message, My.Application.Info.Title, _
        MessageBoxButtons.OK, MessageBoxIcon.Error)
      End Try
     End If
    
     End Sub
    End Class
    

    Ciao.

    • Contrassegnato come risposta vincenzoperr martedì 22 giugno 2010 21:08
    martedì 22 giugno 2010 20:59

Tutte le risposte

  • Ciao,

    con questa procedura effettui l'apertura di un file .

    Dopodiche devi decidere dove effettuare il salvataggio degli indirizzi se in una matrice o List...

    Ciao.

    Imports System.IO
    
    Public Class Form1
    
     Dim StrName As String
    
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
      'Imposta Proprietà Di OpenFileDialog1
      With OpenFileDialog1
       .Filter = "File di testo (*.txt)|*.txt|Tutti i file (*.*)|*.*"
       .FilterIndex = 1
       .InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments
       .Title = ""
      End With
    
      'Apre Il Controllo Open File Dialog
      If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
       Try
        'Salva Il File Path e Nome
        StrName = OpenFileDialog1.FileName
    
        'Dichiarazione Variabile Di Appoggio Lettura File Selezionato
        Dim fileContents As String
    
        'Assegnazione Nome File Da Vidualizzare
        fileContents = My.Computer.FileSystem.ReadAllText(StrName)
    
        'Visualizza Contenuto Del File All'Interno Del TextBox
        TxtFile.Text = fileContents
    
        If TxtFile.Visible = False Then
         TxtFile.Visible = True
        End If
    
        'Visualizza Il Nome Del File Sul Form
        Me.Text = StrName
    
    
        'Al Contrario Avvisa L'utente Con Un Messaggio
       Catch ex As Exception
        MessageBox.Show(ex.Message, My.Application.Info.Title, _
            MessageBoxButtons.OK, MessageBoxIcon.Error)
       End Try
      End If
    
     End Sub
    End Class
    
    martedì 22 giugno 2010 18:46
  • si ma come estrarli dal testo? forse non mi sono espresso bene? non mi interessa l'apertura del file o il salvataggio perchè dopo ci sono altri processi. io ho una textbox con un testo qualsiasi e in questo voglio fare una ricerca per trovare tutti gli indirizzi email. a me questo interessa, questo è il mio problema.
    martedì 22 giugno 2010 18:55
  • Ciao,

    ti chiedo umilmente scusa, prova ad usare il namespace

    System.Text.RegularExpressions

    ti lascio anche un link  http://totem.altervista.org/guida/versione2/C4.php

    Ciao.

    martedì 22 giugno 2010 19:35
  • Puoi utilizzare le regular expression. Non sono semplici da utilizzare ma puoi trovarne una discreta collezione all'indirizzo http://regexlib.com/.

    In alternativa, se gli indirizzi sono divisi da un carattere particolare (come nel To di outlook) puoi utilizzare il metodo Split() della classe String.

    martedì 22 giugno 2010 19:40
    Moderatore
  • Ciao,

    per cio' che riguarda Regex mi e passato sottomano questo link

    http://www.codeproject.com/info/search.aspx?artkw=Regex&sbo=kw

    Ciao.

    martedì 22 giugno 2010 20:03
  • ragazzi io nn c'ho capito niente :)

    ho dato un'occhiata al link di carmelo ( http://totem.altervista.org/guida/versione2/C4.php ) e se scendete sotto c'è proprio quello che serve a me, è il secondo esempio. ma quello che versione di vb è? ho provato nel 2008 e nn va. a voi va?

    martedì 22 giugno 2010 20:17
  • Ciao ,

    che errori ti da?.

    Ciao.

    martedì 22 giugno 2010 20:24
  • tipo "regex" non definito.

    tipo "match" non definito.

    martedì 22 giugno 2010 20:42
  • Ciao

    probabilmente non hai incluso il Namespace  System.Text.RegularExpression ,prova il codice postato qui di seguito

    Imports System.Text.RegularExpressions
    
    Public Class Email
      Private Sub cmdSearch_Click(ByVal sender As Object, _
          ByVal e As EventArgs) Handles cmdSearch.Click
        'Clipboard è una proprietà di My.Computer, di tipo 
        'Microsoft.VisualBasic.MyService.ClipboardProxy: è un oggetto
        'singleton che rappresenta gli appunti. Questo codice 
        'ottiene il testo copiato nella clipboard con la funzione Copia
        Dim Text As String = Clipboard.GetText
        TextBox1.Text = "Salve, ragazzi! Il mio indirizzo è gianni90@email.it, scrivetemi presto," & _
                "attendo risposte per la mia domanda." & _
                "Ciao gianni90: ti devo ricordare che sarebbe meglio se non mettessi il" & _
                "tuo indirizzo in chiaro, poichè potrebbe essere più facilmente " & _
                "rintracciato. Prova invece ad usare questa forma: bartolo[at]prov[dot]com." & _
                "Ok(grazie!)" & _
                "Anzi, se invece vuoi, puoi usare anche questo: caio at miap dot net." & _
                "Vedrò di provare anche questo. Ma potrei anche fare delle combinazioni," & _
                "ad esempio ciack[at]email.fr oppure mark at prov[dot]it... O no?" & _
                "Certo, ottima idea."
    
        TextBox1.Copy()
        'Questa espressione deve ricercare tutti gli indirizzi e-mail
        'presenti nel testo, quindi aggiungerli alla lista:
        '\b(\w+) : la prima serie di caratteri costituisce l'username
        '  dell'utente. Ad esempio in gianni90@provider.it, è gianni90
        '
        '\s* : zero o più spazi. Può capitare che per non rendere 
        '  l'indirizzo reperibile, si usi questa sintassi:
        '  "gianni90 at provider dot it"
        '
        '(@|at|\[at\]) : uno qualsiasi tra @, at e [at], a seconda di
        '  come viene scritto l'indirizzo
        '
        '\s*(\w+)\s* : spazi per lo stesso discorso di prima, poi una
        '  serie di caratteri che indica il provider.
        '
        '(\.|dot|\[dot\]) : uno qualsiasi tra ., dot e [dot], a seconda
        '  di come viene scritto l'indirizzo
        '
        '(\w+) : l'ultima serie di caratteri è il dominio
        Dim Email As New Regex( _
        "\b(\w+)\s*(@|at|\[at\])\s*(\w+)\s*(\.|dot|\[dot\])(\w+)", _
        RegexOptions.Multiline)
    
        For Each M As Match In Email.Matches(Text)
          'Aggiungi un elemento alla lista e lo spunta
          'Attenzione! Bisogna tenere in conto che:
          '- il gruppo 0 rappresenta sempre tutta la sottostringa
          ' catturata e non uno dei raggrupamenti presenti
          '- anche i costruttori di alternanze sono gruppi, poichè
          ' racchiusi entro parentesi tonde
          'Perciò il risultato sarebbe
          '0 1    2  3    4  5
          ' gianni90[at]provider[dot]it
          'Quindi 1 è l'username, 3 il provider e 5 il dominio
          lstEmail.Items.Add(String.Format( _
          "{0}@{1}.{2}", M.Groups(1).Value, M.Groups(3).Value, _
          M.Groups(5).Value), True)
        Next
      End Sub
    
      Private Sub cmdSave_Click(ByVal sender As Object, _
        ByVal e As EventArgs) Handles cmdSave.Click
        'Salva gli indirizzi spuntati
        Dim Save As New SaveFileDialog
        Save.Filter = "File di testo|*.txt"
        If Save.ShowDialog = Windows.Forms.DialogResult.OK Then
          Dim Writer As New IO.StreamWriter(Save.FileName)
          'CheckedItems è una collezione in sola lettura che
          'restituisce tutti gli elementi spuntati
          For Each Item As String In lstEmail.CheckedItems
            Writer.WriteLine(Item)
          Next
          Writer.Close()
        End If
      End Sub
    End Class

    Includi due Button cmdSearch cmdSave , un CheckedListBox lstEmail

    e un TextBox TextBox1.

    Avrai allinteno del CheckedListBox lstEmail la lista email con segno di spunta e potrai salvarli

    in un file di testo.

    Ciao spero di aver capito cio' che ti sreve. 

    • Contrassegnato come risposta vincenzoperr martedì 22 giugno 2010 21:39
    martedì 22 giugno 2010 20:48
  • Ciao,

    se con il codice postato in precedenza riesci a ricavare gli indirizzi,

    in questo esempio ho popolato TextBox1 da codice, puoi utilizzare il codice di apertura di un file

    per pololare il TextBox che tio ho postato in precedenza quando non avevo compreso il tuo problema

    ovvero questo.

    Imports System.IO
    
    Public Class Form1
    
     Dim StrName As String
    
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
     'Imposta Proprietà Di OpenFileDialog1
     With OpenFileDialog1
      .Filter = "File di testo (*.txt)|*.txt|Tutti i file (*.*)|*.*"
      .FilterIndex = 1
      .InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments
      .Title = ""
     End With
    
     'Apre Il Controllo Open File Dialog
     If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
      Try
      'Salva Il File Path e Nome
      StrName = OpenFileDialog1.FileName
    
      'Dichiarazione Variabile Di Appoggio Lettura File Selezionato
      Dim fileContents As String
    
      'Assegnazione Nome File Da Vidualizzare
      fileContents = My.Computer.FileSystem.ReadAllText(StrName)
    
      'Visualizza Contenuto Del File All'Interno Del TextBox
      TextBox1.Text = fileContents
    
      If TextBox1.Visible = False Then
       TextBox1.Visible = True
      End If
    
      'Visualizza Il Nome Del File Sul Form
      Me.Text = StrName
    
    
      'Al Contrario Avvisa L'utente Con Un Messaggio
      Catch ex As Exception
      MessageBox.Show(ex.Message, My.Application.Info.Title, _
        MessageBoxButtons.OK, MessageBoxIcon.Error)
      End Try
     End If
    
     End Sub
    End Class
    

    Ciao.

    • Contrassegnato come risposta vincenzoperr martedì 22 giugno 2010 21:08
    martedì 22 giugno 2010 20:59
  • si ora funziona benissimo. è esattamente ciò che mi serviva :). ora cerco di adattarla a ciò che deve fare. grazie mille carmelo :)
    martedì 22 giugno 2010 21:08
  • Ciao,

    figurati se hai bisogno chiedi tranquillamente,

    ancora scusa se dall' inizio non ho capito quale fosse il tuo vero problema.

    Ciao.

    martedì 22 giugno 2010 21:15
  • ma no no figurati :)

    comunque ho già modificato il codice e l'ho adattato a quello che mi serve. la mia mail è sverige_italien@live.it e se vuoi ti mando il programma finito così vedi che ne esce :)

    a presto ciao!!

    martedì 22 giugno 2010 21:40
  • Ciao,

    si lascia un post in modo che possa vedere com lo hai adattato.

    Ciao e grazie.

    martedì 22 giugno 2010 21:45
  • aiutami di nuovo carmelo!!!

    ora dovrei trovare tutti i link prensenti in un testo. in modo che il browser navighi autonomamente.

    ho provato a modificare il codice di prima ma nn ci riesco, come dovrei fare?

    mercoledì 23 giugno 2010 08:40
  • Ciao Vincenzoperr,

    scusa ma e stata piu' dura del previsto , dal momento che le RegularExpression non sono

    per niente semplici da utilizzare, prova questo codice di esempio

    Imports System.Text.RegularExpressions
    
    'Classe Link
    Public Class Link
    
      'Evento Click cmdSearch
      Private Sub cmdSearch_Click(ByVal sender As Object, ByVal e As EventArgs) Handles cmdSearch.Click
    
        'Assegna questo contenuto a TextBox1
        TextBox1.Text = "Salve, ragazzi! Il mio indirizzo è gianni90@email.it, scrivetemi presto," & _
                "attendo risposte per la mia domanda." & _
                "Ciao gianni90: ti devo ricordare che sarebbe meglio se non mettessi il" & _
                "tuo indirizzo in chiaro, poichè potrebbe essere più facilmente " & _
                "rintracciato. Prova invece ad usare questa forma: bartolo[at]prov[dot]com." & _
                "Ok(grazie!)" & _
                "Anzi, se invece vuoi, puoi usare anche questo: caio at miap dot net." & _
                "Vedrò di provare anche questo. Ma potrei anche fare delle combinazioni," & _
                "ad esempio ciack[at]email.fr oppure mark at prov[dot]it... O no?" & _
                "Certo, ottima idea ti lascio anche due indirizzi email http://www.yahoo.com/ e anche http://www.yahoo.it/" & _
                "http://www.yahoo.it/"
    
        'Seleziona il testo di TextBox1
        TextBox1.SelectAll()
        'Copia negli appunti il testo selezionato
        TextBox1.Copy()
    
        'Dichiarazione espressione Regex Ricerca Link ed ignora lettere maiuscole e minuscole
        Dim Email As New Regex("http://(www\.)?([^\.]+)\s*(\.|dot|\[dot\])(\w+)", RegexOptions.IgnoreCase)
    
        'Assegna a variabile M il contenuto di TextBox1
        For Each M As Match In Email.Matches(TextBox1.Text)
          'Aggiungi un elemento alla lista e lo spunta
          'Attenzione! Bisogna tenere in conto che:
          '- il gruppo 0 rappresenta sempre tutta la sottostringa
          ' catturata e non uno dei raggrupamenti presenti
          '- anche i costruttori di alternanze sono gruppi, poichè
          ' racchiusi entro parentesi tonde
          'Perciò il risultato sarebbe
          '0 1    2  3    4  5
          ' http://www.yahoo.com/
          'Quindi 0 e l'insieme dell'indirizzo email
          lstEmail.Items.Add(String.Format( _
          "{0}", M.Groups(0).Value), True)
        Next
      End Sub
    
      'Evento click cmdSave
      Private Sub cmdSave_Click(ByVal sender As Object, _
        ByVal e As EventArgs) Handles cmdSave.Click
        'Salva gli indirizzi spuntati
        Dim Save As New SaveFileDialog
        Save.Filter = "File di testo|*.txt"
        If Save.ShowDialog = Windows.Forms.DialogResult.OK Then
          Dim Writer As New IO.StreamWriter(Save.FileName)
          'CheckedItems è una collezione in sola lettura che
          'restituisce tutti gli elementi spuntati
          For Each Item As String In lstEmail.CheckedItems
            Writer.WriteLine(Item)
          Next
          'Fine del salvataggio file
          Writer.Close()
        End If
      End Sub
    End Class

    Fammi sapere.

    Ciao.

    mercoledì 23 giugno 2010 13:55
  • mostruoso :)

    funziona!!! io non ci capisco niente di queste regular expressions. tu forse sei un genio :)

    comunque poi in una textbox quando voglio aggiungere un elemento poi deve andare a capo e poi un altro elemento, cosa si mette?

    mercoledì 23 giugno 2010 19:12
  • Ciao,

    al contrario non sono affatto un genio , le regular expression sono come detto nel post precedente 

    molto difficili da comprendere, anchio ho preso mano da poco con Regex.

    Ti conviene usare RichTextBox, perche con TetxBox puoi usare ilMetodo ReadLine()  di System.IO.

    Fai RichTextBox1.Text = RichTextBox1.Text & '\n'.

    Verifica se ti ho dato l'informazione giusta.

    Ciao fammi sapere.

     

    mercoledì 23 giugno 2010 19:21
  • ho provato la tua soluziona ma non va. ho trovato in rete questa costante:

    TextBox1.Text = TextBox1.Text & Label1.Text & vbCrLf

    e funziona sia con una RichTextBox che con una TextBox. Ma grazie lo stesso :)

    giovedì 24 giugno 2010 07:45
  • Ciao,

    si scusa ho sbagliato perche' l'operatore & non accetta caratteri escape,

    ho fatto in questo modo come hai suggerito.

          TextBox2.Text = TextBox2.Text & String.Format(M.Groups(0).Value) & vbCrLf
    Ciao e scusa.
    giovedì 24 giugno 2010 10:09