regex with specific list of string

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • james_027

    regex with specific list of string

    hi,

    how do I regex that could check on any of the value that match any one
    of these ... 'jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug',
    'sep', 'oct', 'nov', 'dec'

    Thanks
    james

  • Carsten Haese

    #2
    Re: regex with specific list of string

    On Wed, 2007-09-26 at 15:42 +0000, james_027 wrote:
    hi,
    >
    how do I regex that could check on any of the value that match any one
    of these ... 'jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug',
    'sep', 'oct', 'nov', 'dec'
    Why regex? You can simply check if the given value is contained in the
    set of allowed values:
    >>s = set(['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug',
    'sep', 'oct', 'nov', 'dec'])
    >>'jan' in s
    True
    >>'spam' in s
    False

    HTH,

    --
    Carsten Haese



    Comment

    • Steve Holden

      #3
      Re: regex with specific list of string

      james_027 wrote:
      hi,
      >
      how do I regex that could check on any of the value that match any one
      of these ... 'jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug',
      'sep', 'oct', 'nov', 'dec'
      >
      Thanks
      >>patr = re.compile('jan |feb|mar|apr|ma y|jun|jul|aug|s ep|nov|oct|dec' )
      >>patr.match("j ul")
      <_sre.SRE_Mat ch object at 0x7ff28ad8>
      >>patr.match("n osuch")
      >>>
      regards
      Steve
      --
      Steve Holden +1 571 484 6266 +1 800 494 3119
      Holden Web LLC/Ltd http://www.holdenweb.com
      Skype: holdenweb http://del.icio.us/steve.holden

      Sorry, the dog ate my .sigline

      Comment

      • Pablo Ziliani

        #4
        Re: regex with specific list of string

        Carsten Haese wrote:
        On Wed, 2007-09-26 at 15:42 +0000, james_027 wrote:
        >
        >hi,
        >>
        >how do I regex that could check on any of the value that match any one
        >of these ... 'jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug',
        >'sep', 'oct', 'nov', 'dec'
        >>
        >
        Why regex? You can simply check if the given value is contained in the
        set of allowed values:
        >
        >
        >>>s = set(['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug',
        >>>>
        'sep', 'oct', 'nov', 'dec'])
        >
        >>>'jan' in s
        Also, check calendar for a locale aware (vs hardcoded) version:
        >>import calendar
        >>[calendar.month_ abbr[i].lower() for i in range(1,13)]
        ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec']

        If you still want to use regexes, you can do something like:
        >>import re
        >>pattern = '(?:%s)' % '|'.join(calend ar.month_abbr[1:13])
        >>pattern
        '(?:Jan|Feb|Mar |Apr|May|Jun|Ju l|Aug|Sep|Oct|N ov|Dec)'
        >>re.search(pat tern, "we are in september", re.IGNORECASE)
        <_sre.SRE_Mat ch object at 0xb7ced640>
        >>re.search(pat tern, "we are in september", re.IGNORECASE). group()
        'sep'

        If you want to make sure that the month name begins a word, use the following pattern instead:
        >>pattern = r'(?:\b%s)' % r'|\b'.join(cal endar.month_abb r[1:13])
        >>pattern
        '(?:\\bJan|\\bF eb|\\bMar|\\bAp r|\\bMay|\\bJun |\\bJul|\\bAug| \\bSep|\\bOct|\ \bNov|\\bDec)'

        If in doubt, Google for "regular expressions in python" or go to http://docs.python.org/lib/module-re.html


        Regards,
        Pablo

        Comment

        • Carsten Haese

          #5
          Re: regex with specific list of string

          On Wed, 2007-09-26 at 12:49 -0400, Steve Holden wrote:
          james_027 wrote:
          hi,

          how do I regex that could check on any of the value that match any one
          of these ... 'jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug',
          'sep', 'oct', 'nov', 'dec'

          Thanks
          >
          >>patr = re.compile('jan |feb|mar|apr|ma y|jun|jul|aug|s ep|nov|oct|dec' )
          >>patr.match("j ul")
          <_sre.SRE_Mat ch object at 0x7ff28ad8>
          >>patr.match("n osuch")
          Unfortunately, that also matches margarine, mayonnaise, and octopus,
          just to name a few ;-)

          --
          Carsten Haese



          Comment

          • Steve Holden

            #6
            Re: regex with specific list of string

            Carsten Haese wrote:
            On Wed, 2007-09-26 at 12:49 -0400, Steve Holden wrote:
            >james_027 wrote:
            >>hi,
            >>>
            >>how do I regex that could check on any of the value that match any one
            >>of these ... 'jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug',
            >>'sep', 'oct', 'nov', 'dec'
            >>>
            >>Thanks
            > >>patr = re.compile('jan |feb|mar|apr|ma y|jun|jul|aug|s ep|nov|oct|dec' )
            > >>patr.match("j ul")
            ><_sre.SRE_Matc h object at 0x7ff28ad8>
            > >>patr.match("n osuch")
            >
            Unfortunately, that also matches margarine, mayonnaise, and octopus,
            just to name a few ;-)
            >
            Indeed, but I think the essential point was served. Unlike the
            mayonnaise and octopus.

            regards
            Steve
            --
            Steve Holden +1 571 484 6266 +1 800 494 3119
            Holden Web LLC/Ltd http://www.holdenweb.com
            Skype: holdenweb http://del.icio.us/steve.holden

            Sorry, the dog ate my .sigline

            Comment

            • Pablo Ziliani

              #7
              Re: regex with specific list of string

              Carsten Haese wrote:
              On Wed, 2007-09-26 at 12:49 -0400, Steve Holden wrote:
              >james_027 wrote:
              >>hi,
              >>>
              >>how do I regex that could check on any of the value that match any one
              >>of these ... 'jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug',
              >>'sep', 'oct', 'nov', 'dec'
              >>>
              >>Thanks
              >>patr = re.compile('jan |feb|mar|apr|ma y|jun|jul|aug|s ep|nov|oct|dec' )
              >>patr.match("j ul")
              ><_sre.SRE_Matc h object at 0x7ff28ad8>
              >>patr.match("n osuch")
              >
              Unfortunately, that also matches margarine, mayonnaise, and octopus,
              just to name a few ;-)
              (and so does the solution you sent before :)

              This is fine IMO since the OP didn't specify the opposite.

              BTW in my previous post I included an example that ensures that the
              search month matches the beginning of a word. That was based in that
              maybe he wanted to match e.g. "dec" against "December" (BTW, it should
              have been r'\b(?:Jan|Feb| ...)' instead). To always match a whole word, a
              trailing \b can be added to the pattern OR (much better) if the month
              can appear both in its abbreviated and full form, he can use the
              extensive set as follows (I hope this is clear, excuse my Thunderbird...) :
              >>pattern = r"\b(?:%s)\b " % '|'.join(calend ar.month_name[1:13] +
              calendar.month_ abbr[1:13])
              >>pattern
              '\\b(?:January| February|March| April|May|June| July|August|Sep tember|October| November|Decemb er|Jan|Feb|Mar| Apr|May|Jun|Jul |Aug|Sep|Oct|No v|Dec)\\b'
              >>target = "Unlike Julia, I like apricots with mayo in august or sep"
              >>target
              'Unlike Julia, I like apricots with mayo in august or sep'
              >>re.findall(pa ttern, target, re.IGNORECASE)
              ['august', 'sep']
              >>re.search(pat tern, target, re.IGNORECASE)
              <_sre.SRE_Mat ch object at 0xb7ced640>
              >>re.findall(pa ttern, target, re.IGNORECASE)
              ['august', 'sep']


              Regards,
              Pablo

              Comment

              • james_027

                #8
                Re: regex with specific list of string

                Hi all,
                This is fine IMO since the OP didn't specify the opposite.
                >
                Thanks for all your replies, though I don't understand quite well the
                going argument? What do you mean when you say "the OP didn't specify
                the opposite"?

                There reason for using regex is because I am going to use it in
                Django's URL pattern

                Thanks
                james

                Comment

                • Steve Holden

                  #9
                  Re: regex with specific list of string

                  james_027 wrote:
                  Hi all,
                  >
                  >This is fine IMO since the OP didn't specify the opposite.
                  >>
                  >
                  Thanks for all your replies, though I don't understand quite well the
                  going argument? What do you mean when you say "the OP didn't specify
                  the opposite"?
                  >
                  There reason for using regex is because I am going to use it in
                  Django's URL pattern
                  >
                  Carsten was pointing out that the pattern I gave you would match any
                  string that *began* with one of the month names, as I didn't include an
                  element to force a match of the end of the string.

                  I did this because I assumed you were most interested in finding out how
                  to match one of a number of alternate strings, and this would likely
                  only be a part of your final pattern.

                  If you already have what you need you really don't need to pay much
                  attention to the rest: it's just geeks picking nits!

                  regards
                  Steve
                  --
                  Steve Holden +1 571 484 6266 +1 800 494 3119
                  Holden Web LLC/Ltd http://www.holdenweb.com
                  Skype: holdenweb http://del.icio.us/steve.holden

                  Sorry, the dog ate my .sigline

                  Comment

                  Working...