+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 2 su 2

Cambiare i marcatori con REGEX

  1. #1
    strategaD non è in linea Scolaretto
    Ho bisogno di cambiare i marcatori in un testo, e il problema si potrebbe risolvere con un normale replace(input, "marcatore", "marcatore modificato") ma uno stesso marcatore nel mio testo può significare più cose quindi avrei bisogno di farlo con regex per evitare errori.
    (è solo un esempio, in questo caso andrebbe sicuramente bene anche un replace ma non negli altri)
    Ecco il codice che uso:
            Dim open As String = "<ul>"
            Dim close As String = "</ul>"
            Dim tofind As String = "(?<=" & open & ")(.*?)(?=" & close & ")"
            Dim coll As MatchCollection = Regex.Matches(TextBox1.Text, tofind)
            Dim str As String = TextBox1.Text
            For Each match2 As Match In coll
                str = Mid(str, 1, match2.Index - open.Length) & "<open>" & match2.ToString & "<close>" & Mid(str,   match2.Index + match2.ToString.Length + close.Length + 1, str.Length)
                TextBox2.Text = str
            Next
    
    Ecco con un testo esempio cosa succede:
    Input:
    <ul>Ciao</ul>12345
    <ul>ok</ul>02468
    Output:
    <open>Ciao<close>12<open>ok<close>/ul>02468
    Come posso fare affinché l'output sia:
    <open>Ciao</close>12345
    <open>ok</close>02468
    ????

    Grazie in anticipo.

  2. #2
    strategaD non è in linea Scolaretto
    Il codice era pensato male il modo migliore era questo:
    Public Function useregex(input As String, open As String, close As String, newopen As String, newclose As String)
            For x = 0 To TextBox1.Text.Length Step 1
                Dim tofind As String = "(?<=" & open & ")(.*?)(?=" & close & ")"
                Dim matches As MatchCollection = Regex.Matches(input, tofind)
                If matches.Count > 0 Then
                    Dim match As Match = matches(0)
                    input = Mid(input, 1, match.Index - open.Length) & newopen & match.ToString & newclose & Mid(input, match.Index + match.ToString.Length + close.Length + 1, input.Length)
                Else
                    Exit For
                End If
            Next
            Return input
        End Function
    
    Ho risolto da solo il problema ma l'importante è che ora tutti sul forum possano sapere come si fa.

    Grazie......
    Ultima modifica di strategaD; 25-02-2017 13:22 

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Risposte: 1
    Ultimo Post: 22-03-2011, 22:23
  2. Classifica Marcatori
    Da swim nel forum PHP
    Risposte: 16
    Ultimo Post: 05-02-2011, 21:09
  3. Classifica Marcatori
    Da Mikypan81 nel forum Microsoft Word
    Risposte: 40
    Ultimo Post: 02-11-2010, 14:35
  4. Funzione Regex
    Da vbdotnetforever nel forum Visual Basic .Net
    Risposte: 15
    Ultimo Post: 12-05-2010, 08:54
  5. Principiante con regex
    Da persichetti nel forum Visual Basic .Net
    Risposte: 1
    Ultimo Post: 06-11-2008, 22:01