"Clayton Kirkwood" <c...@godblessthe.us> Wrote in message: > I was trying to keep it generic. > Wrapped data file: > <tr data-row-symbol="SWKS"><td class="col-symbol > txt"><span class="wrapper " data-model="name:DatumModel;id:null;" > data-tmpl=""><a data-ylk="cat:portfolio;cpos:1" > href="http://finance.yahoo.com/q?s=SWKS" > data-rapid_p="18">SWKS</a></span></td><td class="col-fiftytwo_week_low > cell-raw:23.270000"><span class="wrapper " > data-model="name:DatumModel;id:SWKS:qsi:wk52:low;" > data-tmpl="change:yfin.datum">23.27</span></td><td class="col-prev_close > cell-raw:58.049999"><span class="wrapper " data-model="name:DatumMo > > > import re, os > line_in = file.readline() > # read in humongous html line > stock = re.search('\s*<tr data-row-symbol="([A-Z]+)">', line_in) > #scan to SWKS"> in data > #line, stock should be SWKS > low_52 = re.search('.+wk52:low.+([\d\.]+)<', line_in) #want > to pick up from > #SWKS">, low_52 should be 23.27 > > I am trying to figure out if each re.match starts scanning at the beginning > of the same line over and over or does each scan start at the end of the last > match. It appears to start over?? > > This is stock: > <_sre.SRE_Match object; span=(0, 47), match=' <tr > data-row-symbol="SWKS">'> > This is low_52: > <_sre.SRE_Match object; span=(0, 502875), match=' <tr > data-row-symbol="SWKS"><t> > If necessary, how do I pick up and move forward to the point right after the > previous match? File.tell() and file.__sizeof__(), don't seem to play a > useful role. >
The best solution is ANYTHING but html scraping. If the website offers an api like csf, use it. Html is too prone to changing at the whim of the developers. If you must use html, get beautiful soup. Regex can mess up suddenly even if the developers don't change anything. Regex should only be used on html if you're the one generating the website, and you coordinate it to be parseable. If regex were the best solution you could read the following example pasted from the online docs. re.findall searches a string, not a file, so file position is irrelevant. The numbers below can be used to subscript your string, either for saving the results or for removing the part already searched. Something like line_in = line_in[span [0] +span [1]: ] Ref: https://docs.python.org/3.4/howto/regex.html findall() has to create the entire list before it can be returned as the result. The finditer() method returns a sequence of match object instances as an iterator: >>> >>> iterator = p.finditer('12 drummers drumming, 11 ... 10 ...') >>> iterator <callable_iterator object at 0x...> >>> for match in iterator: ... print(match.span()) ... (0, 2) (22, 24) (29, 31) -- DaveA _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor