VB.Net - Hilfe bei Regex
Hi,
vorne weg: Ich weiß, im Web gibt's zig Beispiele. Ich habe heute auch schon gesucht, aber abgebrochen, weil ich entweder den Wald vor lauter Bäumen nicht sehe oder schlicht weg keine Geduld beim Suchen habe. (Man kann auch sagen "zu faul bin"
)
Ich will Wildcard-Suchen umsetzen. Die gegebenen Suchstrings haben dabei als Wildcard immer und nur das "*"-Zeichen.
Beispiele:
Heute*
*ist*
*Tag
Heute*ein*Tag
Heute*regnet*
Jetzt muss ich prüfen, ob ein gegebener Text einem gegebenen Suchstring entspricht. (Groß/Kleinschreibung egal - das wird vorher alles in Kleinbuchstaben umgewandelt)
Text: "Heute ist ein schöner Tag."
Heute* --> Wahr
*Heute* --> Wahr
*ist* --> Wahr
*Tag --> Falsch (wegen Punkt am Ende des Text)
Heute*ein*Tag. -->Wahr
Heute*regnet* --> Falsch
Meine Idee ist jetzt, das "*" durch die entsprechenden Regex-Strings zu ersetzen und dann mit Regex.IsMatch zu prüfen.
Wenn ich richtig liege dann muss ich "*" durch ".+" ersetzen.
Das klappt solange, wie das "*" nicht am Anfang steht. "*Heute*" soll z.B. auch Wahr ergeben. ".+Heute.+" liefert aber Falsch.
"*Tag" soll Falsch ergeben, "*Tag." Wahr. (beachte den Punkt am Ende) --> "*Tag" als ".+Tag" liefert aber Wahr?
Wie muss ich das angehen? (gerne auch mit Holzhammer
)
E.
vorne weg: Ich weiß, im Web gibt's zig Beispiele. Ich habe heute auch schon gesucht, aber abgebrochen, weil ich entweder den Wald vor lauter Bäumen nicht sehe oder schlicht weg keine Geduld beim Suchen habe. (Man kann auch sagen "zu faul bin"
Ich will Wildcard-Suchen umsetzen. Die gegebenen Suchstrings haben dabei als Wildcard immer und nur das "*"-Zeichen.
Beispiele:
Heute*
*ist*
*Tag
Heute*ein*Tag
Heute*regnet*
Jetzt muss ich prüfen, ob ein gegebener Text einem gegebenen Suchstring entspricht. (Groß/Kleinschreibung egal - das wird vorher alles in Kleinbuchstaben umgewandelt)
Text: "Heute ist ein schöner Tag."
Heute* --> Wahr
*Heute* --> Wahr
*ist* --> Wahr
*Tag --> Falsch (wegen Punkt am Ende des Text)
Heute*ein*Tag. -->Wahr
Heute*regnet* --> Falsch
Meine Idee ist jetzt, das "*" durch die entsprechenden Regex-Strings zu ersetzen und dann mit Regex.IsMatch zu prüfen.
Wenn ich richtig liege dann muss ich "*" durch ".+" ersetzen.
Das klappt solange, wie das "*" nicht am Anfang steht. "*Heute*" soll z.B. auch Wahr ergeben. ".+Heute.+" liefert aber Falsch.
"*Tag" soll Falsch ergeben, "*Tag." Wahr. (beachte den Punkt am Ende) --> "*Tag" als ".+Tag" liefert aber Wahr?
Wie muss ich das angehen? (gerne auch mit Holzhammer
E.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 324426
Url: https://administrator.de/forum/vb-net-hilfe-bei-regex-324426.html
Ausgedruckt am: 06.04.2025 um 21:04 Uhr
8 Kommentare
Neuester Kommentar
Hallo emeriks.
Genau habe ich dein Problem nicht verstanden. Wie auch immer.
"." ist jedes beliebige Zeichen.
"+" steht für muss mindestens einmal vorkommen.
"*" stünde für darf entweder nicht, ein- oder mehrfach vorkommen.
Wenn du einen Punkt als Literal matchen willst, dann musst du ihn mit Backslash maskieren "\."
Wenn du also so etwas wie alles außer Punkt matchen willst, wäre das "[^\.]" wobei du dort "+" oder "*" ebenso hinter der eckigen Klammer anhängen kannst.
Grüße
rubberman
Genau habe ich dein Problem nicht verstanden. Wie auch immer.
"." ist jedes beliebige Zeichen.
"+" steht für muss mindestens einmal vorkommen.
"*" stünde für darf entweder nicht, ein- oder mehrfach vorkommen.
Wenn du einen Punkt als Literal matchen willst, dann musst du ihn mit Backslash maskieren "\."
Wenn du also so etwas wie alles außer Punkt matchen willst, wäre das "[^\.]" wobei du dort "+" oder "*" ebenso hinter der eckigen Klammer anhängen kannst.
Grüße
rubberman

Hi
ich habe das jetzt so interpretiert, wenn das Sternchen immer "mindestens ein Zeichen" bedeuten soll.
Ein
Das zusätzliche Regex-Escaping deswegen weil ja noch andere spezielle Regex-Zeichen im String vorkommen könnten.
Gruß mik
ich habe das jetzt so interpretiert, wenn das Sternchen immer "mindestens ein Zeichen" bedeuten soll.
Ein
"Imports System.Text.RegularExpressions"
für den Code in der Klasse vorausgesetzt.Dim txt As String = "Heute ist ein schöner Tag."
Dim simplePatterns() As String = {"Heute*", "*Heute*", "*ist*", "*Tag"}
For Each pattern In simplePatterns
Dim regexString As String = "^" & Regex.Escape(pattern).Replace("\*", ".+") & "$"
If (New Regex(regexString,RegexOptions.IgnoreCase).IsMatch(txt)) Then
MsgBox("Simple Pattern: '" & pattern & "' trifft zu.")
End If
Next
Gruß mik

Dann ersetze im Replace das Plus durch das Sternchen
.....Replace("\*", ".+")
in diesen.....Replace("\*", ".*")
<OT>
A coworker, when describing regular expressions, once said, “Whoever created regular expressions had to be on drugs.” This couldn’t be more truthful.
Quelle: http://blog.pluralsight.com/powershell-operators-like-match
</OT>
A coworker, when describing regular expressions, once said, “Whoever created regular expressions had to be on drugs.” This couldn’t be more truthful.
Quelle: http://blog.pluralsight.com/powershell-operators-like-match
</OT>