RegExp - Leerzeichen innerhalb eckiger Klammer ersetzen

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von lhawk.

    RegExp - Leerzeichen innerhalb eckiger Klammer ersetzen

    Hallo zusammen,

    ich habe einen String, welchen ich mittels einer RegEx verändern möchte.
    Der String enthält eckige Klammern und darin n Wörter. Die Leerzeichen innerhalb der eckigen Klammer möchte ich durch ein Sonderzeichen ersetzen.

    Beispiel:

    Quellcode

    1. myString = "[Dies ist ein Test] = true AND [Ich brauche eine Expression] = true"

    Daraus soll folgendes gemacht werden:

    Quellcode

    1. myString = "[Dies§ist§ein§Test] = true AND [Ich§brauche§eine§Expression] = true"


    Hab leider nach elendig langen Versuchen keine Idee, wie mein pattern für eine RegExp aussehen muss.

    Bin für jede Hilfe dankbar.
    Vielen Dank!
    Danke für die schnelle Antwort.
    Werde den Code gleich morgen ausprobieren :)

    Der String beschreibt einen Filter.
    In der eckigen Klammer steht das Feld nach dem gefiltert wird, dahinter der Operator und dann der Wert. Alles optional verbunden mit einem "And" oder "Or".

    Ich geb dann morgen Rückmeldung, ob es funktioniert hat.
    Danke nochmal :)

    Edit:
    Hmmm, das hat nicht so funktioniert wie ich es mir dachte. Korrekterweise gibt mir der Pattern den Inhalt der eckigen Klammer wieder.
    Ich möchte aber die Leerzeichen sofort in einem Schwung ersetzen und nicht erst einen Teil aus dem String herausfiltern.

    Beispiel:

    Quellcode

    1. Dim pattern as String = "MyPattern"
    2. Dim RegEx as New RegEx(pattern)
    3. Dim myNewString as String = RegEx.Replace(sImput, "%")


    Mit Deinem genannten Pattern ersetzt er aber nicht die Leerzeichen, sondern den ganzen Inhalt der eckigen Klammer...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „lhawk“ ()

    lhawk schrieb:

    Hab leider nach elendig langen Versuchen keine Idee, wie mein pattern für eine RegExp aussehen muss.

    vlt. erleichtert es dich zu erfahren, dasses nicht geht.
    Ein Replace kann nur mit den festen Gruppen eines Matches was replacen.
    Bei deiner Anforderung musses aber innerhalb eines Matches eine Variable anzahl von Unter-Matches geben, die zu replacen sind.

    Du mußt also iwie 2-stufig vorgehen.
    Was ich immer schick finde, ist die Regex-MatchEvaluator-Technik:

    VB.NET-Quellcode

    1. Imports System.Text.RegularExpressions
    2. Public Module Program
    3. Public Sub Main()
    4. Dim src = "myString = ""[Dies ist ein Test] = true AND [Ich brauche eine Expression] = true"""
    5. Dim rgx = New Regex("\[.*?\]")
    6. Dim out = rgx.Replace(src, AddressOf MatchEvaluator)
    7. 'hoho: noch schicker mit anonymer Function!
    8. out = rgx.Replace(src, Function(mt) mt.Value.Replace(" ", "§"))
    9. End Sub
    10. Private Function MatchEvaluator(ByVal match As Match) As String
    11. Return match.Value.Replace(" ", "§")
    12. End Function
    13. End Module