Hallo Community,
ich beschäftige mich neuerdings mit Regulären ausdrücken. davon habe ich allerdings noch nicht sehr viel ahnung. ich habe folgenden string:
IN
MSG
1253551933
1253551948
Hallo
Diesen möchte ich erstmal feststellen, also IN MSG, das bleibt jeweils gleich, danach kommen zwei timestamps und dann eine zeichenfolge, ich habe leider keine ahnung, wie ich die timestamps und den folgende zeichenfolge in variablen bekomme.
Mein Ansatz:
rg = re.compile('[IN] [MSG] ([0-9]+) ([0-9]+) ([a-z])')
m = rg.search(string)
if m:
timestamp1=m.group(1)
timestamp2=m.group(2)
zeichenfolge=m.group(3)
kann mich jemand von euch beraten, was ich für einen reg_exp benutzen sollte? vielen dank
Reguläre Ausdrücke
Hallo.
Hast du dir mal die Dokumentation zum [mod]re[/mod]-Modul durchgelesen? Oben steht die Syntax beschrieben, ganz unten findest du auch noch jede Menge Beispiele.
Du hast hier gleich mehrere Probleme: "[IN]" bedeutet nicht, dass du nach "IN" suchst, sondern nach "I" oder "N". Mit den eckigen Klammern beschreibst du Mengen. "[a-z]" steht auch für genau ein Zeichen, nicht einen beliebig langen Text. Auch die Zeilenumbrüche müssen bei dir noch beachtet werden.
Arbeite dich erstmal ganz langsam an das Thema ran und versuche einfache Sachen zu finden. Anschließend kannst du deinen Ausdruck schrittweise aufbauen.
Google sollte dir bei regulären Ausdrücken auch helfen, die Syntax ist in allen Sprachen mehr oder weniger identisch.
Hast du dir mal die Dokumentation zum [mod]re[/mod]-Modul durchgelesen? Oben steht die Syntax beschrieben, ganz unten findest du auch noch jede Menge Beispiele.
Du hast hier gleich mehrere Probleme: "[IN]" bedeutet nicht, dass du nach "IN" suchst, sondern nach "I" oder "N". Mit den eckigen Klammern beschreibst du Mengen. "[a-z]" steht auch für genau ein Zeichen, nicht einen beliebig langen Text. Auch die Zeilenumbrüche müssen bei dir noch beachtet werden.
Arbeite dich erstmal ganz langsam an das Thema ran und versuche einfache Sachen zu finden. Anschließend kannst du deinen Ausdruck schrittweise aufbauen.
Google sollte dir bei regulären Ausdrücken auch helfen, die Syntax ist in allen Sprachen mehr oder weniger identisch.
Das Leben ist wie ein Tennisball.
gut zum üben = http://kodos.sourceforge.net/, verwende ich auch
the more they change the more they stay the same
-
- User
- Beiträge: 2
- Registriert: Montag 30. März 2009, 13:10
mit dem programm und der doku ging das ja super einfach, vielen dank
bei mir siehts jetzt so aus:
IN\nMSG\n([0-9]+)\n([0-9]+)\n(.+)
muss ich nur noch einen guten reg_exp bauen, der URLS erkennen kann, bzw finden
bei mir siehts jetzt so aus:
IN\nMSG\n([0-9]+)\n([0-9]+)\n(.+)
muss ich nur noch einen guten reg_exp bauen, der URLS erkennen kann, bzw finden
dafür gibts BeautifulSoup oder lxml als html-parser
the more they change the more they stay the same
@Dav1d: die sind zum Parsen gedacht, nicht zum finden von URLs.
@anachronist: Das Forum und auch Google sollten da schon einige Ergebnisse liefern. Alle URLs exakt zu erfassen wird auf jeden Fall ein interessanter Ausdruck, dir reicht aber wahrscheinlich einer, der alle häufigen URLs findet.
@anachronist: Das Forum und auch Google sollten da schon einige Ergebnisse liefern. Alle URLs exakt zu erfassen wird auf jeden Fall ein interessanter Ausdruck, dir reicht aber wahrscheinlich einer, der alle häufigen URLs findet.
Das Leben ist wie ein Tennisball.
jo parsen, man kann aber damit auch urls finden
the more they change the more they stay the same
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Wie denn das? Innerhalb von `<a>` als `href` Attribut?Dav1d hat geschrieben:jo parsen, man kann aber damit auch urls finden
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
so:
vllt zu umständlich
Code: Alles auswählen
>>> from BeautifulSoup import BeautifulSoup
>>> html = u'<td width="100%">
<a href="post-147655.html#147655">
<img src="templates/subSilver/images/icon_minipost.gif" width="12" height="9" alt="Beitrag" title="Beitrag" border="0" /></a>
<span class="postdetails">Verfasst am: Di Sep 22, 2009 14:50<span class="gen"> </span>
Titel: Regul\xc3\xa4re Ausdr\xc3\xbccke</span>
</td>\n<td valign="top" nowrap="nowrap">
<a href="posting.php?mode=quote&p=147655">
<img src="templates/subSilver/images/lang_german/icon_quote.gif" alt="Antworten mit Zitat" title="Antworten mit Zitat" border="0" /></a>
</td>\n'
>>> soup = BeautifulSoup(html)
>>> ablocks = soup.findAll('a')
>>> hrefs = []
>>> for i in ablocks:
hrefs.append(soup.find('a')['href'])
>>> hrefs
[u'post-147655.html#147655', u'post-147655.html#147655']
Zuletzt geändert von Dav1d am Mittwoch 23. September 2009, 15:27, insgesamt 1-mal geändert.
the more they change the more they stay the same
wie schauts mit: aus?
das Enzigste was mir da nicht gefällt ist das [w]{0,3} da, falls es 2mal vorkommt auch dazu zählt
Code: Alles auswählen
http://[w]{0,3}[.]?[\w-]+[.][a-z]{0,3}
das Enzigste was mir da nicht gefällt ist das [w]{0,3} da, falls es 2mal vorkommt auch dazu zählt
the more they change the more they stay the same
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Nein, der Ansatz ist viel zu naiv. `info` (und schon gar nicht `museum`) als TLD wird nicht abgedeckt. Und das Protokoll zaehlt gar nicht zur URL. Subdomains werden nicht abgedeckt und Unterverzeichnisse/Dateien auch nicht.Dav1d hat geschrieben:wie schauts mit:aus?Code: Alles auswählen
http://[w]{0,3}[.]?[\w-]+[.][a-z]{0,3}
Aber je nachdem welche URLs der OP bearbeiten muss, reicht ein einfacher Ansatz (er sollte aber mal damit rausruecken).
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
bin selber noch ziemlch schlecht in res nd wils lernen, wie schaut mit:
aus?
Code: Alles auswählen
http://[w]{0,3}[.]?[\w, ., -]+[.][a-z]{0,3}[/]?[\w, /, -]+[., \w]+
the more they change the more they stay the same
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Der [w]{0,3}[.]? Part ist völlig überflüssig, da URLs auch mit anderen Buchstaben, gefolgt von einem Punkt anfangen können, etwa http://programming.reddit.com. Außerdem scheint es Kommas zu matchen, die ebenso wie Spaces in Domainnamen nicht zulässig sind. Fliegt auch mit TLDs wie .info, .aero, .name, .museum auf die Nase, außerdem gibt es keine Null und Einbuchstaben-TLDs.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ich bin jetzt spontan auf so etwas gekommen:
Edit: ein verrutschtes Fragezeichen korrigiert
Code: Alles auswählen
r'(http://([\w\d-]+\.)+[\w\d]{2,}(/.+?)?)\s'
Zuletzt geändert von /me am Donnerstag 24. September 2009, 12:01, insgesamt 1-mal geändert.
Die Wirkung des Ausdrucks war Dav1d wahrscheinlich nicht bewusst. Vermutlich hat er Kommas und Leerzeichen als Trenner gedacht. Auch die [] mit nur einem Buchstaben sind ja ungewöhnlich. Wahrscheinlich sollte auch Dav1d erst einmal EyDus Vorschlag zum Lesen der re-Doku beherzigen.Leonidas hat geschrieben:Außerdem scheint es Kommas zu matchen, die ebenso wie Spaces in Domainnamen nicht zulässig sind.
MfG
HWK