Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

Frage zu Regexp

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 ...

Antwort
Alt 27.07.11, 22:34   #1 (permalink)
Moderator
 
Benutzerbild von lightsaver
 
Registriert seit: 19.06.06
lightsaver Leistung: Pentium Ilightsaver Leistung: Pentium Ilightsaver Leistung: Pentium I
Likes: 51
Question Frage zu Regexp

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.

lightsaver ist offline   Mit Zitat antworten
Alt 27.07.11, 22:58   #2 (permalink)
 
Benutzerbild von Hackse
 
Registriert seit: 31.07.06
Hackse Leistung: 8086
Likes: 32
Standard

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
EDIT:
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)
Hackse ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 28.07.11, 10:07   #3 (permalink)
Moderator
Themenstarter
 
Benutzerbild von lightsaver
 
Registriert seit: 19.06.06
lightsaver Leistung: Pentium Ilightsaver Leistung: Pentium Ilightsaver Leistung: Pentium I
Likes: 51
Standard

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
lightsaver ist offline   Mit Zitat antworten
Alt 28.07.11, 11:52   #4 (permalink)
 
Registriert seit: 12.08.10
mime Leistung: Pentium Imime Leistung: Pentium I
Likes: 30
Standard

Zitat:
Zitat von lightsaver Beitrag anzeigen
Ich bräuchte hier das "nochmal ein" und das "Beispiel sein" als Match
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
Vielleicht reicht das als inspiration...

HTH

Micha
__________________
http://www.openvas.org
mime ist offline   Mit Zitat antworten
Alt 28.07.11, 13:00   #5 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

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.
CDW ist offline   Mit Zitat antworten
Alt 28.07.11, 14:53   #6 (permalink)
Moderator
Themenstarter
 
Benutzerbild von lightsaver
 
Registriert seit: 19.06.06
lightsaver Leistung: Pentium Ilightsaver Leistung: Pentium Ilightsaver Leistung: Pentium I
Likes: 51
Standard

Danke, werde das nachher mal testen
lightsaver ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Frage zu Regexp
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61