if statement - How to apply conditional treatment with line.endswith(x) where x is a regex result? -


i trying apply conditional treatment lines in file (symbolised list values in list demonstration purposes below) , use regex function in endswith(x) method x range page-[1-100]).

import re lines = ['http://test.com','http://test.com/page-1','http://test.com/page-2'] line in lines:     if line.startswith('http') , line.endswith('page-2'):         print line 

so required functionality if value starts http , ends page in range of 1-100 returned.

edit: after reflecting on this, guess corollary questions are:

  • how make regex pattern ie page-[1-100] variable?
  • how use variable eg x in endswith(x)

edit:

this not answer original question (ie not use startswith() , endswith()), , have no idea if there problems this, solution used (because achieved same functionality):

import re lines = ['http://test.com','http://test.com/page-1','http://test.com/page-100'] line in lines:     match_beg = re.search( r'^http://', line)     match_both = re.search( r'^http://.*page-(?:[1-9]|[1-9]\d|100)$', line)     if match_beg , not match_both:         print match_beg.group()     elif match_beg , match_both:         print match_both.group() 

i don't know python enough paste usable code, far regular expression concerned, rather trivial do:

page-(?:[2-9]|[1-9]\d|100)$ 

what expression match:

  • page- fixed string matched 1:1 (case insensitive if set options that).
  • (?:...) non-capturing group that's used separating following branching.
  • | act "either or" expressions being left/right.
  • [2-9] match numerical range, i.e. 2-9.
  • [1-9]\d match 2 digit number (10-99); \d matches digit.
  • 100 again plain , simple match.
  • $ match line end or end of string (again based on settings).

using expression don't use specific "ends with" functionality (that's given through using $).

considering have parse whole string anyway, may include "begins with" check well, shouldn't cause additional overhead (at least none you'd notice):

^http://.*page-(?:[2-9]|[1-9]\d|100)$ 
  • ^ matches beginning of line or string (based on settings).
  • http:// once again plain match.
  • . match character.
  • * quantifier "none or more" previous expression.

Comments

Popular posts from this blog

Perl - how to grep a block of text from a file -

delphi - How to remove all the grips on a coolbar if I have several coolbands? -

javascript - Animating array of divs; only the final element is modified -