Regular expressions question

Discussion in 'Python' started by Victor Polukcht, Jan 16, 2007.

  1. I have 2 strings:

    "Global etsi3 *200 ok 30 100% 100%
    Outgoing"
    and
    "Global etsi3 * 4 ok 30 100% 100%
    Outgoing"

    The difference is "*200" instead of "* 4". Is there ability to write a
    regular expression that will match both of that strings?
     
    Victor Polukcht, Jan 16, 2007
    #1
    1. Advertising

  2. Victor Polukcht

    Duncan Booth Guest

    "Victor Polukcht" <> wrote:

    > I have 2 strings:
    >
    > "Global etsi3 *200 ok 30 100% 100%
    > Outgoing"
    > and
    > "Global etsi3 * 4 ok 30 100% 100%
    > Outgoing"
    >
    > The difference is "*200" instead of "* 4". Is there ability to write a
    > regular expression that will match both of that strings?
    >

    Yes, ".*" would match both of the strings, but not in a useful way. You'll
    have to consider which strings you *don't* want to match as well as which
    ones you do and whether you want to extract any information from the
    strings or find the ones which match.

    But first take a step back and look at the problem as a whole. You didn't
    say what you are trying to do, and often people will jump at regular
    expressions as the solution when there may be better ways of doing what
    they want without writing a regular expression.

    What do you really want to do?
     
    Duncan Booth, Jan 16, 2007
    #2
    1. Advertising

  3. Actually, i'm trying to get the values of first field (Global) , fourth
    (200, 4), and fifth (100%) and sixth (100%).

    Everything except fourth is simple.

    On Jan 16, 2:59 pm, Duncan Booth <> wrote:
    > "Victor Polukcht" <> wrote:
    > > I have 2 strings:

    >
    > > "Global etsi3 *200 ok 30 100% 100%
    > > Outgoing"
    > > and
    > > "Global etsi3 * 4 ok 30 100% 100%
    > > Outgoing"

    >
    > > The difference is "*200" instead of "* 4". Is there ability to write a
    > > regular expression that will match both of that strings?Yes, ".*" would match both of the strings, but not in a useful way. You'll

    > have to consider which strings you *don't* want to match as well as which
    > ones you do and whether you want to extract any information from the
    > strings or find the ones which match.
    >
    > But first take a step back and look at the problem as a whole. You didn't
    > say what you are trying to do, and often people will jump at regular
    > expressions as the solution when there may be better ways of doing what
    > they want without writing a regular expression.
    >
    > What do you really want to do?
     
    Victor Polukcht, Jan 16, 2007
    #3
  4. Victor Polukcht

    Neil Cerutti Guest

    On 2007-01-16, Victor Polukcht <> wrote:
    > Actually, i'm trying to get the values of first field (Global) , fourth
    > (200, 4), and fifth (100%) and sixth (100%).
    >
    > Everything except fourth is simple.


    >>> g = "Global etsi3 * 4 ok 30 100% 100% Outgoing"
    >>> import re
    >>> r = re.search('\*\s+(\d+)', g)
    >>> r.group()

    '* 4'
    >>> r.group(1)

    '4'

    --
    Neil Cerutti
    We're not afraid of challenges. It's like we always say: If you want to go out
    in the rain, be prepared to get burned. --Brazillian soccer player
     
    Neil Cerutti, Jan 16, 2007
    #4
  5. The same regular expression should work for another string (with *200).

    On Jan 16, 5:40 pm, Neil Cerutti <> wrote:
    > On 2007-01-16, Victor Polukcht <> wrote:
    >
    > > Actually, i'm trying to get the values of first field (Global) , fourth
    > > (200, 4), and fifth (100%) and sixth (100%).

    >
    > > Everything except fourth is simple.
    > >>> g = "Global etsi3 * 4 ok 30 100% 100% Outgoing"
    > >>> import re
    > >>> r = re.search('\*\s+(\d+)', g)
    > >>> r.group()

    > '* 4'
    > >>> r.group(1)'4'

    >
    > --
    > Neil Cerutti
    > We're not afraid of challenges. It's like we always say: If you want to go out
    > in the rain, be prepared to get burned. --Brazillian soccer player
     
    Victor Polukcht, Jan 16, 2007
    #5
  6. Victor Polukcht

    Neil Cerutti Guest

    On 2007-01-16, Victor Polukcht <> wrote:
    > On Jan 16, 5:40 pm, Neil Cerutti <> wrote:
    >> On 2007-01-16, Victor Polukcht <> wrote:
    >>
    >> > Actually, i'm trying to get the values of first field (Global) , fourth
    >> > (200, 4), and fifth (100%) and sixth (100%).

    >>
    >> > Everything except fourth is simple.
    >> >>> g = "Global etsi3 * 4 ok 30 100% 100% Outgoing"
    >> >>> import re
    >> >>> r = re.search('\*\s+(\d+)', g)
    >> >>> r.group()

    >> '* 4'
    >> >>> r.group(1)'4'

    >
    > The same regular expression should work for another string (with *200).


    Sorry about that. It should have been:

    r = re.search('\*\s*(\d+)', g)

    --
    Neil Cerutti
     
    Neil Cerutti, Jan 16, 2007
    #6
  7. Victor Polukcht wrote:
    > I have 2 strings:
    >
    > "Global etsi3 *200 ok 30 100% 100%
    > Outgoing"
    > and
    > "Global etsi3 * 4 ok 30 100% 100%
    > Outgoing"
    >
    > The difference is "*200" instead of "* 4". Is there ability to write a
    > regular expression that will match both of that strings?
    >

    ---------------------------- x.py begin --------
    import re

    s1 = "Global etsi3 *200 ok 30 100% 100% Outgoing"
    s2 = "Global etsi3 * 4 ok 30 100% 100% Outgoing"

    re_m = re.compile( "^"
    "(\S+)" # Global
    "\s+"
    "(\S+)" # etsi3
    "\s+"
    "((\*)\s*(\d+))" # *200 * 4
    "\s+"
    "(\S+)" # ok
    "\s+"
    "(\S+)" # 30
    "\s+"
    "(\S+)" # 100%
    "\s+"
    "(\S+)" # 100%
    "\s+"
    "(\S+)" # Outgoing
    "$"
    ).match

    print "match s1:", re_m(s1).groups()
    print "match s2:", re_m(s2).groups()
    ----------------------------- x.py file end ---------

    % python x.py
    match s1: ('Global', 'etsi3', '*200', '*', '200', 'ok', '30', '100%', '100%', 'Outgoing')
    match s2: ('Global', 'etsi3', '* 4', '*', '4', 'ok', '30', '100%', '100%', 'Outgoing')
     
    Wolfgang Grafen, Jan 16, 2007
    #7
  8. Victor Polukcht kirjoitti:
    > I have 2 strings:
    >
    > "Global etsi3 *200 ok 30 100% 100%
    > Outgoing"
    > and
    > "Global etsi3 * 4 ok 30 100% 100%
    > Outgoing"
    >
    > The difference is "*200" instead of "* 4". Is there ability to write a
    > regular expression that will match both of that strings?
    >


    If the goal is not to study regular expressions, here's a solution
    without them. Not so short, but working.

    lst = [
    "Global etsi3 *200 ok 30 100% 100%
    Outgoing",
    "Global etsi3 * 4 ok 30 100% 100%
    Outgoing"]

    for e in lst:
    es = e.split()
    if len(es) == 9:
    num_val = es[3]
    else:
    num_val = es[2][1:]
    print es[0], num_val, es[-3], es[-2]


    Cheers,
    Jussi
     
    Jussi Salmela, Jan 16, 2007
    #8
  9. Great thnx. It works.

    On Jan 16, 6:02 pm, Wolfgang Grafen <>
    wrote:
    > Victor Polukcht wrote:
    > > I have 2 strings:

    >
    > > "Global etsi3 *200 ok 30 100% 100%
    > > Outgoing"
    > > and
    > > "Global etsi3 * 4 ok 30 100% 100%
    > > Outgoing"

    >
    > > The difference is "*200" instead of "* 4". Is there ability to write a
    > > regular expression that will match both of that strings?---------------------------- x.py begin --------

    > import re
    >
    > s1 = "Global etsi3 *200 ok 30 100% 100% Outgoing"
    > s2 = "Global etsi3 * 4 ok 30 100% 100% Outgoing"
    >
    > re_m = re.compile( "^"
    > "(\S+)" # Global
    > "\s+"
    > "(\S+)" # etsi3
    > "\s+"
    > "((\*)\s*(\d+))" # *200 * 4
    > "\s+"
    > "(\S+)" # ok
    > "\s+"
    > "(\S+)" # 30
    > "\s+"
    > "(\S+)" # 100%
    > "\s+"
    > "(\S+)" # 100%
    > "\s+"
    > "(\S+)" # Outgoing
    > "$"
    > ).match
    >
    > print "match s1:", re_m(s1).groups()
    > print "match s2:", re_m(s2).groups()
    > ----------------------------- x.py file end ---------
    >
    > % python x.py
    > match s1: ('Global', 'etsi3', '*200', '*', '200', 'ok', '30', '100%', '100%', 'Outgoing')
    > match s2: ('Global', 'etsi3', '* 4', '*', '4', 'ok', '30', '100%', '100%', 'Outgoing')
     
    Victor Polukcht, Jan 16, 2007
    #9
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Jay Douglas
    Replies:
    0
    Views:
    610
    Jay Douglas
    Aug 15, 2003
  2. ASP.Confused

    Question on regular expressions

    ASP.Confused, Jul 26, 2004, in forum: ASP .Net
    Replies:
    2
    Views:
    379
    ASP.Confused
    Jul 26, 2004
  3. jeffM
    Replies:
    3
    Views:
    387
    Alan Moore
    Feb 2, 2004
  4. Replies:
    9
    Views:
    491
    Roedy Green
    Jan 23, 2006
  5. Noman Shapiro
    Replies:
    0
    Views:
    235
    Noman Shapiro
    Jul 17, 2013
Loading...

Share This Page