non-greed regex compilieren

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.
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

non-greed regex compilieren

Beitragvon Costi » Freitag 1. Dezember 2006, 16:00

ich weis nicht ob, ich regex in pzthon richtig werstanden habe
re.compile compilert anscheinend eine non-greedy pattern, wahrend man mit re.search und re.match sich ausuchen kann ob man greedy oder non-greedzs haben will, brauche aber in meinen fall eine compilierte greedy pattern


wie geht das?

danke

ps: shadet sicher auch nicht wenn ich mein bisherigen code hoer einfuege:

Code: Alles auswählen

from socket import *
import urllib2
import re


se = [
   {
   "host": "www.google.de",
   "path": "/search",
   "keyword": "q",
   "regex": re.compile('<a class=l href=".+">'),
   "pageName": "start",
   "pageAdd": 100,
   "pageInit":   0,
   "aufJeden": {"num": 100, "filter": "off"}
   },
   {
   "host": "search.live.com", #immer nur 10 ergebnisse auf einmal, mit cookies waeren 50 moeglich
   "path": "/results.aspx",
   "keyword": "q",
   #"regex": re.compile(t4ht),
   "pageName": "first",
   "pageAdd": 50,
   "pageInit":   1,
   "aufJeden": {}
   }
   ]

   
def mkKeyword():
   return "lol"

class Search:
   def __init__(self, ARG):
      self.ARG = ARG
      self.not_urls = 0
      self.current_page = self.ARG["pageInit"]
      self.keyword = "fd"
   
   def _dict2cgi(self, dict):
      retval = "?"
      for key, val in dict.iteritems():
         retval += key + "=" + str(val) + "&"
      return retval[:-1]
   
   def _get(self, arg):#nein, kein urllib2
      arg = self._dict2cgi(arg)
      s = socket(AF_INET, SOCK_STREAM)
      print "httpGetting..."
      s.connect((self.ARG["host"], 80))
      s.send("GET " + self.ARG["path"] + arg + " HTTP/1.1\n")
      s.send('Host: ' + self.ARG["host"])
      s.send('\n\n')
      resp = ''
      while not '</html>' in resp:
         resp += s.recv(1024)
      return resp
   
   def _parse(self, resp):
      print self.ARG["regex"]
      return self.ARG["regex"].findall(resp)
   
   def __call__(self):
      if self.not_urls == 1:         
         self.keyword = mkKeyword()
         current_page = self.ARG["pageInit"]
      elif self.not_urls == 2:
         return "ausgedient"
      
      z = self.ARG["aufJeden"]
      z.update({self.ARG["pageName"]: self.current_page, self.ARG["keyword"]: self.keyword})
      print z
      resp = self._get(z) #  + mit dicts?
      urls = self._parse(resp)
      if not urls:
         self.not_urls += 1
         print "keine urls"
      self.current_page += self.ARG["pageAdd"]
      return urls


print Search(se[0])()
"""
sObjs = []
for i in se:
   sObjs.append(Search(i))

while 1:
   for i in sObjs:
      print i()

"""

cp != mv
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: non-greed regex compilieren

Beitragvon Leonidas » Freitag 1. Dezember 2006, 17:05

Costi hat geschrieben:ich weis nicht ob, ich regex in pzthon richtig werstanden habe

Nein, hast du nicht. Ich denke sogar, du hast reguläre Ausdrücke allgemein nicht verstanden.

Costi hat geschrieben:re.compile compilert anscheinend eine non-greedy pattern, wahrend man mit re.search und re.match sich ausuchen kann ob man greedy oder non-greedzs haben will, brauche aber in meinen fall eine compilierte greedy pattern

re.compile kompiliert Patterns. Punkt. Ob sie greedy ist oder nicht, ist re.compile egal, weil es sowas wie greedy und non-greedy Patterns gar nicht gibt. Operatoren können greedy und non-greedy sein. Daher musst du in deiner Pattern non-greedy Operatoren nutzen.

Und was re.match() vs. re.search() angeht gibt es die Seite Matching vs Searching direkt in der Dokumentation. Übrigens bringen kompiliere Patterns ihr eigenes match() und search() mit.

P.S.: Deinen Code habe ich mir nicht angeschaut, der ist ähmm.. sehr suboptimal.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

Beitragvon Costi » Freitag 1. Dezember 2006, 17:49

Und was re.match() vs. re.search() angeht gibt es die Seite Matching vs Searching direkt in der Dokumentation. Übrigens bringen kompiliere Patterns ihr eigenes match() und search() mit.

asooo, thx, ok jetzt hat die welt einen neuen sinn für mich^^

Deinen Code habe ich mir nicht angeschaut, der ist ähmm.. sehr suboptimal.


..und damit selbstdukumentierend und übersichtlich
dat hat aber schon alles seinen sinn, bin noch läönsgt nicht fertig

gruesse
costi
cp != mv
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 1. Dezember 2006, 18:24

Costi hat geschrieben:
Deinen Code habe ich mir nicht angeschaut, der ist ähmm.. sehr suboptimal.


..und damit selbstdukumentierend und übersichtlich

Verwirrende Namensgebung, schlechte Reimplementation von HTTP 1.1 etc. würden es eher treffen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Freitag 1. Dezember 2006, 20:00

Leonidas hat geschrieben:schlechte Reimplementation von HTTP 1.1 etc. würden es eher treffen.
falsche Reimplementation von HTTP 1.1 trifft es am besten.

RFC 2616 hat geschrieben:HTTP/1.1 defines the sequence CR LF as the end-of-line marker for all protocol elements
Also \r\n statt \n
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

Beitragvon Costi » Freitag 1. Dezember 2006, 20:35

probiert doch keinen kuchen, der noch nicht gebacken wurde

ich poste dan den script dann nochmal wen es fertig ist ( ;
cp != mv
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Freitag 1. Dezember 2006, 20:37

Wenn es größer wird, dann aber bitte auf http://paste.pocoo.org ;)

Wenn wir dein Skript beurteilen, weil es hier drin steht, ist das ja nicht unsere Schuld...
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 1. Dezember 2006, 21:44

Joghurt hat geschrieben:
Leonidas hat geschrieben:schlechte Reimplementation von HTTP 1.1 etc. würden es eher treffen.
falsche Reimplementation von HTTP 1.1 trifft es am besten.

Ich will auch noch "unnötig" einwerfen. Siehe SimpleHTTPServer oder Twisted.

Costi hat geschrieben:probiert doch keinen kuchen, der noch nicht gebacken wurde

Das sind Erfahrungswerte: etwas was schon schwach anfängt, wird selten besser. Ist übrigens auch mit schlechten Filmen so.

birkenfeld hat geschrieben:Wenn wir dein Skript beurteilen, weil es hier drin steht, ist das ja nicht unsere Schuld...

Ney, wir können da gar nix dafür.. es ist fast schon ein Zwang 8)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

Beitragvon Costi » Freitag 1. Dezember 2006, 22:00

h will auch noch "unnötig" einwerfen. Siehe SimpleHTTPServer oder Twisted.

wie willst du da simpleHTTP s e r v e r einbinden, soll doch ein client wreden?
ich hatte schon gedacht twisted anzuwenden, ich brauch die hosts aber in 'chunks",

die ganze sache koennen wir aber erst mal zur seite stellen:
ich geh zetzt zu einer party, dh morgen bis 13 ins bett liegen, um danach den ganzen ueberflussigen, langweiligen, anstrengenden, zeitraubenden schullschrott zu machen und dan am sonntag einen "familienprogramm" zu planen, der immer irgendwie den ganzen tag lang dauert. im laufe der woche werd ich dan sowieso

auch verdammt, hab mich jetzt verplappert

naja ok also erstmal jetzt party...


cu


[/quote]
cp != mv
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 1. Dezember 2006, 22:19

Costi hat geschrieben:wie willst du da simpleHTTP s e r v e r einbinden, soll doch ein client wreden?

So:

Code: Alles auswählen

import SimpleHTTPServer

Aber hast schon recht, hab da nicht aufgepasst beim Schreiben. Dafür würde nämlich sogar die urllib reichen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Beitragvon sape » Samstag 2. Dezember 2006, 10:33

Wieso so Zynisch die ganze Woche?
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

Beitragvon Costi » Samstag 2. Dezember 2006, 12:46

Wieso so Zynisch die ganze Woche?


hmmm weis ich auch nicht, ist aber auf jeden fall nicht unhoefflich/unfreundlich gemeint
cp != mv
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Beitragvon sape » Samstag 2. Dezember 2006, 15:44

Costi hat geschrieben:
Wieso so Zynisch die ganze Woche?


hmmm weis ich auch nicht, ist aber auf jeden fall nicht unhoefflich/unfreundlich gemeint
Ich meinte auch nicht dich damit.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 2. Dezember 2006, 16:39

XtraNine hat geschrieben:Ich meinte auch nicht dich damit.

Tja, viel zu tun, vieles das liegen bleibt bzw. den geplanten Zeitrahmen bei weitem sprengt, vieles das gar nicht vorran geht. Motivation im Keller - da brauch ich manchmal sowas (außerdem finde ich das gar nicht so böse, in einem anderen Thread letztens habe ich mich schon stark zusammenreissen müssen obwohl da was zu schreiben sehr viel Spaß gemacht hätte).

Und mei, ich werd mich doch grad noch mal verschreiben dürfen und statt urllib den SimpleHTTPServer anbieten dürfen - klar ist sowas peinlich, aber darauf groß rumzureiten?

schöne grüße vom Leonidas der langsam zum meandtheshell des Python-Forums mutiert ;)
My god, it's full of CARs! | Leonidasvoice vs Modvoice

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]