regular expressions 1. versuch

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
gooogle
User
Beiträge: 66
Registriert: Freitag 15. Mai 2009, 19:13
Wohnort: burghausen

Hallo,

ich versuche mich gerade an den regulären ausdrücken. aber scheitere am 1. versuch.
ich möchte gerne die replace(" ", "") methode verwenden, allerdings mit einer bedingung.

Code: Alles auswählen

a = "        Michael:         "He went to me" ,   .... ----- - - - ) ) ) : "But without me" - - )"
alles was mit hochstriche angegeben ist soll bei der replace anwendung ignoriert werden, sodass folgendes rauskommt:

Code: Alles auswählen

"Michael:"He went to me",....--------))):"But without me"--)"
hoffe ihr habt verstanden was ich meine :)
fff gh
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Und wo ist dein Versuch?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
gooogle
User
Beiträge: 66
Registriert: Freitag 15. Mai 2009, 19:13
Wohnort: burghausen

Hallo,

was ich versucht habe ist wie folgt:

Code: Alles auswählen


text = "He ( '1 1 1') carefully 'zz   z' disguised (())    'b u t'}--- captured quickly by police."

v = findall("'.*?'",text)

print v

for i in v:
    text = text.replace(i, (i.replace(" ","$$")))

print "vers 1 ", text
text = text.replace(" ","")
print "vers 2 ",text
text = text.replace("$$"," ")

print "last version ", text

sieht aber nicht elegant aus :P
fff gh
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Code: Alles auswählen

findall("'.*?'")
ergibt für mich keinen Sinn, das findet doch allen Text, oder?
gooogle
User
Beiträge: 66
Registriert: Freitag 15. Mai 2009, 19:13
Wohnort: burghausen

Hallo,

nee, eigentlich nur den in Hochkomma, also alles was in '...' sich befindet. ;)
fff gh
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Was ist denn das für ein Format?

Du willst Dich hier mit Parsern befassen - ohne Zustandsautomaten geht hier nicht viel denke ich. BlackJack hat hier ein nettes Beispiel gepostet: http://python-forum.de/viewtopic.php?f=1&t=24221
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Du versuchst Dinge zu machen, die mit einfachen regulären Ausdrücken nicht gehen (hängt alles damit zusammen, dass reguläre Sprachen nicht zählen können). Aber ich biete dir dies:

Code: Alles auswählen

import re
s = '        Michael:         "He went to me" ,   .... ----- - - - ) ) ) : "But without me" - - )'
print("".join(x if x[0] == '"' else x.replace(" ", "") for x in re.findall(r'"[^"]*"|[^"]+', s)))
Stefan
gooogle
User
Beiträge: 66
Registriert: Freitag 15. Mai 2009, 19:13
Wohnort: burghausen

Hallo

danke für die tipps.
ich verstehe dass ihr andere möglichkeiten bietet, die effizienter sind. aber bedenkt, ich lerne noch..ich muss langsam reinkommen, dazu muss ich alles mal ausgetestet haben ;)

also meine methode funktioniert, musste nur auch die andere variante beachten:

mit

for i in ["'.*?'", '".*?"']:
v = findall(i,text)

Gruss
fff gh
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Auch als Anfänger kann man einfache Rückfragen beantworten denke ich!
Hyperion hat geschrieben:Was ist denn das für ein Format?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
gooogle
User
Beiträge: 66
Registriert: Freitag 15. Mai 2009, 19:13
Wohnort: burghausen

was meinst du mit Format?

Es handelt sich um einen einfachen string :)
fff gh
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

gooogle hat geschrieben:was meinst du mit Format?

Es handelt sich um einen einfachen string :)
Ich meine die Syntax des Strings. Was ist das? Der String fällt ja nicht vom Himmel!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

Hier ein Versuch mit `pyparsing`:

Code: Alles auswählen

import pyparsing as pp


def main():
    def remove_spaces(source, line, tokens):
        return tokens[0].replace(' ', '')
    
    not_string = pp.CharsNotIn('"\'').setParseAction(remove_spaces)
    grammar = pp.Combine(pp.ZeroOrMore(not_string | pp.quotedString))
    
    source = ('        Michael:         "He went to me" ,   .... ----- - - -'
              ' ) ) ) : \'But without me\' - - )')
    
    print grammar.parseString(source)[0]


if __name__ == '__main__':
    main()
Antworten