Re: string.remove bringt nicht das erwartete

Tech-Archive recommends: Fix windows errors by optimizing your registry



"Maxi" <maxitesch@xxxxxx> schrieb im Newsbeitrag
news:9b5dd935-2caf-44f9-a7c3-d022039e3470@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
^^^^^^^^^^^^
Hier sollte der volle Name(Vor- und Zuname) stehen.
===============
Gibt es einen besseren Weg um den mit strSearchText beginnenden Teil
aus strTest zuverlässig zu entfernen?
===============

Hallo Maximilian,
vorab wird es sich bei Dir sicherlich um existierende Pfadangaben halten.
Für Manipulationen an den Pfaden solltest Du dann unbeding die
IO.Path-Klasse benutzen, sowie Achim es schon erwähnt hat.
Zu Deinem Problem bietet sich ein Regex an, den "c:\temp" und "C:\TEMP" sind
beides gültige Verzeichnisnamen die auf ein und das selbe Verzeichnis
hindeuten. Mit einem einfachen [String].Replace wirst Du da Probleme
bekommen, da der Suchstring exakt passen muss, also auch die
Groß-Kleinschreibung. Ein Regex ist da etwas flexibler.
\\\
Option Infer On '(VB2008)
--
Dim metas = "\*+?.()[]{}/^|$"
Dim strTest = "c:\Temp\Bilder"
Dim strSearchText = "C:\Temp\"
Dim pattern = strSearchText
For Each meta In metas
pattern = System.Text.RegularExpressions.Regex.Replace(pattern, "\" &
meta, "\" & meta)
Next
pattern = "^" & pattern
Dim strNewFolder = System.Text.RegularExpressions.Regex.Replace(strTest,
pattern, "", System.Text.RegularExpressions.RegexOptions.IgnoreCase)
Console.WriteLine(strnewfolder)
///
Das Wichtigste bei einem Regex ist das Pattern(Suchmuster) und hier gibt es
einige Besonderheiten insbesondere die Metazeichen als da wären:
\*+?.()[]{}/^|$
Das interssanteste Zeichen ist der Backslash(\). Dieses leitet ein
Escapesequence ein. Wenn Du nach irgendeinem Zeichen suchen willst gibst Du
das im Pattern mit einem * an. Wenn Du aber nach dem Stern suchen willst
musst, musst Du mit \* suchen. Wenn man nun aber nach einem Backslash sucht
muss man mit \\ suchen. gleichen gilt für alle anderen Metazeichen. Nehmen
wir mal an Du würdest versuchen mit dem Pattern "c:\daten\" zu suchen, dann
bedeutet das für das Regex:
Suche nach "c:", gefolgt von irgendeiner Zahl, gefolgt "aten", gefolgt von
???, hmm
Erklärung:
das \d innerhalb des Pattern hat eine Sonderstellung und zwar sagt es aus,
das irgendeine Zahl gesucht werden soll. Und der letzte Backslash leitet
eine Escapesequence ein aber es folgt nichts mehr. Das Regex würde hier eine
Exception werfen. Schauen wir mal was die Schleife da oben macht. Erst mal
durchläuft sie alle Metazeichen. Dabei sucht sie im Pattern nach
Metazeichen(siehe vorangestellter Backslash) und ersetzt diese so, das jedes
Metazeichen einem Backslash vorangestellt wird. Wenn wir bspw. den
Suchstring
"C:\Temp\Bilder (2008)"
hätten, dann ergibt das dann
"C:\\Temp\\Bilder \(2008\)"
Wichtig ist, dass das erste zuverarbeitende Metazeichen der Backslash ist.
Angenommen es wäre das letzte Zeichen, dann würde das dabei rauskommen:
"C:\\Temp\\Bilder \\(2008\\)"
Und das gibt ein falsche Suchergebnis. Das Regex such dann nämlich nach
"C:\Temp\Bilder \2008\".
So vor dem eigentlich Suchen und Ersetzen wird dem Pattern noch ein ^
vorangestellt. Dieses Metazeichen sagt aus, das am Zeilenanfang begonnen
werden soll, d.h. das der eigentliche Suchstring sich am Anfang befinden
muss. So und beim Ersetzen wird dann der Parameter IgnoreCase angegeben, er
sagt einfach aus, dass das Regex Groß- und Kleinschreibung ignorieren soll.
"c.\\temp" findet also auch bspw. "C:\TeMp" oder "c:\tEMP".
Achtung: Es gibt auch Dateisysteme bei denen die Groß- und Kleinschreibung
wichtig ist(bspw. Linux). AFAIK ist das aber bei den Microsoftsystemen nicht
der Fall.
--
Gruß Scotty


.



Relevant Pages

  • Re: Regex doubt
    ... > really dont want to use HtmlAgilitypack - I'm learning RegEx and want to ... >>> exp is braindead as it chokes on nested tags. ... >>> says something like - 'match any text that doesnt match this ... >>>, within a pattern, match the pattern itself?In that case, the first ...
    (microsoft.public.dotnet.framework)
  • Re: limits on regex?
    ... Same regex could work and fail on 2 different strings. ... not on the complexity of regex expression. ... storing / changing documents in DB and keep resulting pattern description ... > Does anyone have any hard data on the size / complexity limits of the ...
    (microsoft.public.dotnet.framework)
  • (patch for Bash) match, strinterval
    ... These 2 builtin commands can do regex or fixed-string matching. ... Return success if STRING contains REGEX pattern. ... which case SUBMATCH will contain 3 elements, ...
    (comp.unix.shell)
  • RegEx
    ... I want to use RegEx to parse a text string (I want to extract the tables ... The definition of the search pattern can be described as ... Dim regex, Match, Matches, Patrn, strText ' Create variable. ...
    (microsoft.public.scripting.vbscript)
  • Re: Regex: Capturing and replacing question
    ... The documentation is in the Javadocs for the relevant classes. ... I read all the info for Pattern, ... regex expressions and patterns, then went over the documentation at the ...
    (comp.lang.java.programmer)