Hallo,
da hier im Forum sehr oft nach Highlighten und auslesen von bestimmten teilen eines Textes gefragt wird, habe ich mich entschlossen ein kleiens Tuturial zu schreiben.
Highlighten:
Wir müssen natürlich erst einmal RegEx importieren. Das machen wir so:
Jetzt kommt der eigentlich Code:
Dieser Code würde auch den text färben , wenn mitten in dem wort "Test" vorkommt. Also würde aus großertest großertest.
Wer das nicht beabsichtigt kann anstatt pattern den wert "Test" zu zuweisen einfach den wert "\sTest\s" benutzen. Das "\s" bedeutet, dass vor dem wort nichts stehen darf also eine leerzeile sein muss.
Gehen wir davon aus, das wir einen Highlighter für Visual Basic bauen möchten also brauchen wir auch noch diese Funktion
Das Funktioniert fast genauso wie das Highlighten von einzelnen wörtern:
Sachen aus einem Text auslesen:
Das sieht am anfang meistens etwas komplizierter aus als es eigentlich ist. Wir gehen jetzt davon aus, dass wir einen Quelltext haben, der einen Interpreten,Titel und eine Tanzart enthält. Der Code ist dieser:
In diesem Beispiel ist der Interpret Coldplay, der Titel Viva la Vida und die Tanzart ist Cha Cha Cha. Wir gehen jetzt davon aus, dass wir davon nichts wissen und nur den Quelltext haben ohne Interpreten,Titel und Tanzart. Außerdem befindet sich der Text in RichTextBox1(ist eigentlich egal dient auch nur als beispiel)
Jetzt wollen wir zuerst den Interpreten(Coldplay) auslesen:
Erläuterung:
in den klammern finden wir sehr viele "\" diese Zeichen muss man in diesem Fall nicht setzen, aber in manch anderen schon und deswegen habe ich sie auch benutzt. Das Zeichen "\" ist auch nur dafür da, damit das Programm weiß, dass das zeichen kein Befehl ist sondern ein String(Zeichen). Bei RegEx gibt es nämlich Befehle, die aus solchen Zeichen bestehen, und damit sie nicht als solche erkannt werden muss man sie mit einem "\" escapen.
In dem Code befindet sich auch noch das : "(?<interpret>(.*))"
Das (?<interpret>) steht sozusagen für so etwas wie eine Variable (einen String). An dieses Stelle wird der Text in die Gruppe (so nennt man das bei RegEx) gespeichert und man kann diesen Inhalt dann mit diesem Code auslesen.
Hinter "(?<interpret>)" befindet sich auch noch ein "(.*)". Diese Zeichenkombination, steht für jedes x beliebiges Zeichen. An dieser Stelle würde normaler weise der Interpret stehen, aber da wir nicht wissen was an dieser Stelle steht, sagen wir dem Programm mit "(.*)", dass dort irgend etwas stehen muss das aber nicht bekannt ist.
Auf diese gleiche Art und weise kann man natürlich auch den Titel und die Tanzart auslesen. Da es fast genau das gleiche ist , werde ich hier einfach den Code schreiben.
Titel:
Tanzart:
Hier ein paar Befehle für RegEx(für den wert in klammern):
. = Steht für Jedes Zeichen aus für eine neue Zeile
\w = Steht für jedes alphanummerisches Zeichen
\s = Steht für ein Zeichen mit einem folgendem/vorangehendem Leerzeichen
\d = Steht für jede Ziffer
\b = Steht für den Anfang oder das Ende eines Wortes
^ = Steht für den anfang einen Stirngs
$ = Steht für das ende eines Strings
* = Wiederholt ein Zeichen beliebig oft
+ = Wiederholt das Zeichen ein oder mehr mals
? = Wiederholt das Zeichen 0 oder 1 mal
{x} = Wiederholt das Zeichen x mal, wobei x für eine beliebige Zahl steht
{x,y} = Wiederhotl das Zeichen mindestens x mal aber nicht öfter als y mal, wobei auch hier x und y für beliebige Zahlen stehen
\W = Steht für alle Zeichen die NICHT alphanummerisch sind
\S = Steht für jedes Zeichen ohne ein Leerzeichen davor oder dahinter
\D = Steht für jedes Zeichen das keine Ziffer ist
\B = Steht für eine Position die nicht der Anfang oder das Ende des Wortes ist
[^x] = Kann für jedes Zeichen stehen außer x,wobei auch hier wieder x für eine beliebige Zahl steht
[^abcd] = Kann für jedes Zeichen stehen, außer für a,b,c und d
(Text) = Speichert den String, in diesem Fall "Text" in einer automatisch nummerrierten Gruppe
(?<name>) = Speichert einen String in der Gruppe "namen" (namen ist nur ein Beispiel)
Wer jetzt immer noch nicht genug hat, oder noch etwas unklar ist, der kann entweder seine Frage hier posten oder sich nochmal diese Seiten angucken:
Tuturial von Dodo
30 Minuten Tuturial (auf englisch)
Ich hoffe ich konnte euch helfen.
Grüße,
viperkill
da hier im Forum sehr oft nach Highlighten und auslesen von bestimmten teilen eines Textes gefragt wird, habe ich mich entschlossen ein kleiens Tuturial zu schreiben.
Highlighten:
Wir müssen natürlich erst einmal RegEx importieren. Das machen wir so:
Jetzt kommt der eigentlich Code:
VB.NET-Quellcode
- Dim Reg As System.Text.RegularExpressions.MatchCollection 'RegularExpression deklarieren
- Dim Match As System.Text.RegularExpressions.Match 'Match = Treefer (übereinstimmung)
- Dim pattern As String = "Test" 'Das Wort nachdem gesucht wird(groß & kleinschreibung ist egal). In diesem Fall wäre es "Test"
- Reg = System.Text.RegularExpressions.Regex.Matches(LCase(RichTextBox1.Text), LCase(pattern)) 'Das erste LCase gibt an wo der Text steht der durchsucht werden soll (in diesem Fall: RichTextBox1 und das zwiete LCase gibt an wonach gesucht werden soll. In diesem Fall nach "pattern" (pattern wurde der Wert "Test" zugewiesen)
- For Each Match In Reg 'Für jeden treffer mach das
- RichTextBox1.Select(Match.Index, Match.Length) 'Text markieren. Index ist die angabe, an welcher stelle das gesuchte wort steht und lenght ist logischerweise die länge des treffers
- RichTextBox1.SelectionColor = Color.Blue ' Farbe des selektierten Textes festplegen
- Next
Dieser Code würde auch den text färben , wenn mitten in dem wort "Test" vorkommt. Also würde aus großertest großertest.
Wer das nicht beabsichtigt kann anstatt pattern den wert "Test" zu zuweisen einfach den wert "\sTest\s" benutzen. Das "\s" bedeutet, dass vor dem wort nichts stehen darf also eine leerzeile sein muss.
Gehen wir davon aus, das wir einen Highlighter für Visual Basic bauen möchten also brauchen wir auch noch diese Funktion
Das Funktioniert fast genauso wie das Highlighten von einzelnen wörtern:
VB.NET-Quellcode
- Dim Reg As System.Text.RegularExpressions.MatchCollection
- Dim Match As System.Text.RegularExpressions.Match
- Dim pattern As String = "'.*" ' Hier steht das .* für jedes x beliebige zeichen. Also wird alles hinter dem ' markiert, wenn es sich in der selben Zeile befindet
- Reg = Regex.Matches(LCase(RichTextBox1.Text), LCase(pattern))
- For Each Match In Reg
- RichTextBox1.Select(Match.Index , Match.Length)
- RichTextBox1.SelectionColor = Color.Green
- Next
Sachen aus einem Text auslesen:
Das sieht am anfang meistens etwas komplizierter aus als es eigentlich ist. Wir gehen jetzt davon aus, dass wir einen Quelltext haben, der einen Interpreten,Titel und eine Tanzart enthält. Der Code ist dieser:
PHP-Quellcode
- return false;"><td class='det_content' style='white-space:nowrap;'>Coldplay</td><td class='det_content'>Viva la Vida</td>
- <td class='det_content' style='white-space:nowrap;font-size:11px;'><img src='/images/n_4.gif' alt='4' title='gut tanzbar' /> Cha Cha Cha / <img src='/images/n_3.gif' alt='3' title='normal tanzbar' /> Disco Fox</td>
In diesem Beispiel ist der Interpret Coldplay, der Titel Viva la Vida und die Tanzart ist Cha Cha Cha. Wir gehen jetzt davon aus, dass wir davon nichts wissen und nur den Quelltext haben ohne Interpreten,Titel und Tanzart. Außerdem befindet sich der Text in RichTextBox1(ist eigentlich egal dient auch nur als beispiel)
Jetzt wollen wir zuerst den Interpreten(Coldplay) auslesen:
VB.NET-Quellcode
Erläuterung:
in den klammern finden wir sehr viele "\" diese Zeichen muss man in diesem Fall nicht setzen, aber in manch anderen schon und deswegen habe ich sie auch benutzt. Das Zeichen "\" ist auch nur dafür da, damit das Programm weiß, dass das zeichen kein Befehl ist sondern ein String(Zeichen). Bei RegEx gibt es nämlich Befehle, die aus solchen Zeichen bestehen, und damit sie nicht als solche erkannt werden muss man sie mit einem "\" escapen.
In dem Code befindet sich auch noch das : "(?<interpret>(.*))"
Das (?<interpret>) steht sozusagen für so etwas wie eine Variable (einen String). An dieses Stelle wird der Text in die Gruppe (so nennt man das bei RegEx) gespeichert und man kann diesen Inhalt dann mit diesem Code auslesen.
Hinter "(?<interpret>)" befindet sich auch noch ein "(.*)". Diese Zeichenkombination, steht für jedes x beliebiges Zeichen. An dieser Stelle würde normaler weise der Interpret stehen, aber da wir nicht wissen was an dieser Stelle steht, sagen wir dem Programm mit "(.*)", dass dort irgend etwas stehen muss das aber nicht bekannt ist.
Auf diese gleiche Art und weise kann man natürlich auch den Titel und die Tanzart auslesen. Da es fast genau das gleiche ist , werde ich hier einfach den Code schreiben.
Titel:
Tanzart:
Hier ein paar Befehle für RegEx(für den wert in klammern):
. = Steht für Jedes Zeichen aus für eine neue Zeile
\w = Steht für jedes alphanummerisches Zeichen
\s = Steht für ein Zeichen mit einem folgendem/vorangehendem Leerzeichen
\d = Steht für jede Ziffer
\b = Steht für den Anfang oder das Ende eines Wortes
^ = Steht für den anfang einen Stirngs
$ = Steht für das ende eines Strings
* = Wiederholt ein Zeichen beliebig oft
+ = Wiederholt das Zeichen ein oder mehr mals
? = Wiederholt das Zeichen 0 oder 1 mal
{x} = Wiederholt das Zeichen x mal, wobei x für eine beliebige Zahl steht
{x,y} = Wiederhotl das Zeichen mindestens x mal aber nicht öfter als y mal, wobei auch hier x und y für beliebige Zahlen stehen
\W = Steht für alle Zeichen die NICHT alphanummerisch sind
\S = Steht für jedes Zeichen ohne ein Leerzeichen davor oder dahinter
\D = Steht für jedes Zeichen das keine Ziffer ist
\B = Steht für eine Position die nicht der Anfang oder das Ende des Wortes ist
[^x] = Kann für jedes Zeichen stehen außer x,wobei auch hier wieder x für eine beliebige Zahl steht
[^abcd] = Kann für jedes Zeichen stehen, außer für a,b,c und d
(Text) = Speichert den String, in diesem Fall "Text" in einer automatisch nummerrierten Gruppe
(?<name>) = Speichert einen String in der Gruppe "namen" (namen ist nur ein Beispiel)
Wer jetzt immer noch nicht genug hat, oder noch etwas unklar ist, der kann entweder seine Frage hier posten oder sich nochmal diese Seiten angucken:
Tuturial von Dodo
30 Minuten Tuturial (auf englisch)
Ich hoffe ich konnte euch helfen.
Grüße,
viperkill
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „viperkill“ ()