| Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme. |
Diskussion: Frage zu Regexp im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Ich habe Mal eine Verständnisfrage zu Regexp. Es geht um folgendes: Ich möchte einen String formatieren und Regexp haben ...
![]() |
| | #1 (permalink) |
| Moderator ![]() Registriert seit: 19.06.06 ![]() ![]() ![]() Likes: 51 | Anzeige Ich habe Mal eine Verständnisfrage zu Regexp. Es geht um folgendes: Ich möchte einen String formatieren und Regexp haben mir bisher sehr geholfen, nur der letzte Punkt bereitet mir Kopfzerbrechen und ich befürchte, dass es gar nicht umsetzbar ist. Als Zeichen für sowohl den Anfang als auch das Ende der Formatierung dient mir ein Zeichen, nehmen wir einfach mal das "-" Nehmen wir mal als Beispiel folgenden String: "In diesem Beispieltext -wird ein Teil- formatiert." das "wird ein Teil" soll also formatiert werden. Soweit müsste das denke ich sogar noch klappen, auch wenn mir hierzu noch kein Regexp eingefallen ist, aber eine Formatierung muss nicht wie ein TAG beendet werden. Soll also ab einem bestimmten Punkt der komplette restliche String formatiert werden, wird man wohl nur das anfängliche "-" machen. Ist hier ein Regexp überhaupt möglich und wenn ja, wie würde der aussehen? Ich vermute allerdings eher, dass speziell wegen dem zweiten Fall ein Regexp nicht möglich sein wird. Ich könnte natürlich auch einfach den String per Schleife mit string.indexof("-") durchgehen und hätte dann alternierend ein Anfangs- und ein Endzeichen, allerdings würde ich, wenn möglich, lieber wie bei den anderen Parsings beim Regexp bleiben. |
| | |
| | #2 (permalink) |
| Registriert seit: 31.07.06 ![]() Likes: 32 | Welche Sprache? Bilde drei Gruppen durch "-" getrennt i.d. Form: G1-G2-G3 Du möchtest Gruppe 2 zwischen den beiden "-" ausgeben, in Deinem Falle den String "wird ein Teil". Das geht z.B. so: Code: echo "In diesem Beispieltext -wird ein Teil- formatiert." | sed -e 's!\(.*\)-\(.*\)-\(.*\)!\2!' wird ein Teil Natürlich kannst Du im Regex die drei Gruppen noch auf bestimmte Zeichen (z.B. Alphanum + Space) einschränken, falls erwünscht. Geändert von Hackse (27.07.11 um 23:01 Uhr) |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Moderator ![]() Registriert seit: 19.06.06 ![]() ![]() ![]() Likes: 51 | Die Sprache ist Java, wobei das ja egal sein sollte. Dein Beispiel geht hier aber nicht, da einfach der komplette String als Treffer gefunden wird. Habe ich nur noch ein einziges "-" matcht es gar nicht. Treffer müssten für mich entweder der String zwischen 2 "-" sein oder, wenn nur noch eines übrig bleibt, dann zwischen dem einen "-" und dem Ende. "Das soll -nochmal ein- weiteres -Beispiel sein" Ich bräuchte hier das "nochmal ein" und das "Beispiel sein" als Match |
| | |
| | #4 (permalink) |
| Registriert seit: 12.08.10 ![]() ![]() Likes: 30 | In Perl würde ich das wohl in etwa so machen. Code: mime@kira[3]: ~ 0)$ echo "Das soll -nochmal ein- weiteres -Beispiel sein" | perl -e 'my $x=<STDIN>; chomp($x); while( $x =~ m/-([^-]+)-?/g ) { print $1 ."\n"; }'
nochmal ein
Beispiel sein HTH Micha
__________________ http://www.openvas.org |
| | |
| | #5 (permalink) |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | RegExp + Teststrings und Ausgabe. "findall" sucht alle Vorkommen und gibt einen Tuple mit Groups zurück (daraus wirdmit match[0] einfach die erste gewählt und ausgegeben). Code: >>> import re >>> regex = "((-[^-]+-)|(-.+))" >>> s = "Das soll -nochmal ein- weiteres -Beispiel sein" >>> s2 = "noch ein Beispiel" >>> s3 = "nichts -" >>> s4 = "nichts -nichts" >>> strings = [s, s2, s3, s4] >>> for s in strings: ... for match in re.findall(regex, s): ... print match[0] ... -nochmal ein- -Beispiel sein -nichts >>>
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |