Strings aus einem regulären Ausdruck generieren?

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
Dingels
User
Beiträge: 61
Registriert: Dienstag 23. Dezember 2008, 19:50

Schönen guten Abend,

da meine Suche bisher erfolglos blieb, möchte ich euch mal fragen: Gibt es ein Python-Modul, das es ermöglicht, Strings aus einem regulären Ausdruck zu generieren? Also z.B. sowas:

Code: Alles auswählen

>>> generate_string('talk(?:ing|ed|s)?')
['talk', 'talking', 'talked', 'talks']
Das funktioniert natürlich nur für diejenigen regulären Ausdrücke, die nicht unendlich viele Strings beschreiben. Gibt's sowas? Ich vermute, ohne endliche Automaten lässt sich das nicht bewerkstelligen, oder?

Wofür ich das brauche? Nun, ich würde mir gerne einen kleinen Web Crawler mittels der urllib-Bibliothek basteln, der in der Lage ist, all diejenigen Websites zu durchforsten, deren URLs einem bestimmten Schema entsprechen, welches ich mit einem regulären Ausdruck vorgebe. Das scheint mit der Standardbib noch nicht möglich zu sein.

Könnt ihr mir da weiterhelfen? Herzlichen Dank! :)
BlackJack

@Dingels: Man könnte recht einfach eine Funktion schreiben die aus einer Vorlage und einer Liste mit Alternativen die Zeichenketten erzeugt:

Code: Alles auswählen

from itertools import product


def iter_variations(template, alternatives):
    return (template % values for values in product(*alternatives))


def main():
    for string in iter_variations(
        'Ich zeichne %s %s.', [['rote', 'gelbe', 'lila'], ['Kreise', 'Punkte']]
    ):
        print string


if __name__ == '__main__':
    main()
Da liesse sich sicher auch ein Parser schreiben der etwas re-ähnliches entsprechend aufbereitet.

Wenn die Alternativen auch verschachtelt sein dürfen, wird es natürlich etwas komplizierter.
Antworten