Seite 1 von 1

regular expressions 1. versuch

Verfasst: Freitag 24. September 2010, 09:48
von gooogle
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 :)

Re: regular expressions 1. versuch

Verfasst: Freitag 24. September 2010, 10:11
von jbs
Und wo ist dein Versuch?

Re: regular expressions 1. versuch

Verfasst: Freitag 24. September 2010, 11:45
von gooogle
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

Re: regular expressions 1. versuch

Verfasst: Freitag 24. September 2010, 11:58
von mkesper

Code: Alles auswählen

findall("'.*?'")
ergibt für mich keinen Sinn, das findet doch allen Text, oder?

Re: regular expressions 1. versuch

Verfasst: Freitag 24. September 2010, 12:01
von gooogle
Hallo,

nee, eigentlich nur den in Hochkomma, also alles was in '...' sich befindet. ;)

Re: regular expressions 1. versuch

Verfasst: Freitag 24. September 2010, 12:03
von Hyperion
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

Re: regular expressions 1. versuch

Verfasst: Freitag 24. September 2010, 12:06
von sma
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

Re: regular expressions 1. versuch

Verfasst: Freitag 24. September 2010, 12:19
von gooogle
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

Re: regular expressions 1. versuch

Verfasst: Freitag 24. September 2010, 12:20
von Hyperion
Auch als Anfänger kann man einfache Rückfragen beantworten denke ich!
Hyperion hat geschrieben:Was ist denn das für ein Format?

Re: regular expressions 1. versuch

Verfasst: Freitag 24. September 2010, 12:25
von gooogle
was meinst du mit Format?

Es handelt sich um einen einfachen string :)

Re: regular expressions 1. versuch

Verfasst: Freitag 24. September 2010, 12:36
von Hyperion
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!

Re: regular expressions 1. versuch

Verfasst: Freitag 24. September 2010, 12:44
von 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()