Defining re pattern for matching list of numbers

View: New views
4 Messages — Rating Filter:   Alert me  

Defining re pattern for matching list of numbers

by jorma kala :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi,
I'm trying to write a re pattern to match a list of one or more numbers, each number is in the range of 1-15 value and the numbers are separated by spaces (but there are no spaces at the beginning and end of the string). For instance:
 
"3"
"1 14 8"
 
but not:
 
"22"
" 5 11"
 
I've come up with something like this
 
re.compile("^((([1-9])|(1[0-8]))( +(?=[1-9]))*)+$")
 
but I can't believe this has to be so complicated.
Does anyone know some simpler re pattern to match this kind of string
Many thanks

--
http://mail.python.org/mailman/listinfo/python-list

Re: Defining re pattern for matching list of numbers

by Chris Rebert-6 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Fri, Nov 6, 2009 at 8:04 AM, jorma kala <jjkk73@...> wrote:

> Hi,
> I'm trying to write a re pattern to match a list of one or more numbers,
> each number is in the range of 1-15 value and the numbers are separated by
> spaces (but there are no spaces at the beginning and end of the string). For
> instance:
>
> "3"
> "1 14 8"
>
> but not:
>
> "22"
> " 5 11"
>
> I've come up with something like this
>
> re.compile("^((([1-9])|(1[0-8]))( +(?=[1-9]))*)+$")
>
> but I can't believe this has to be so complicated.

Your format seems so simple I have to ask why you're using regexes in
the first place.

try:
    nums = [int(num) for num in line.split(" ")]
except ValueError:
    print "Invalid input"

for num in nums:
    if num < 1 or num > 15:
        raise ValueError, "Number present which is outside of valid range"

Cheers,
Chris
--
http://blog.rebertia.com
--
http://mail.python.org/mailman/listinfo/python-list

Re: Defining re pattern for matching list of numbers

by jorma kala :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Thanks for your reply.
But I need to use a regex; my program deals with a large number of  patterns, and I want to treat them in a uniform way (through regex).

On 11/6/09, Chris Rebert <clp2@...> wrote:
On Fri, Nov 6, 2009 at 8:04 AM, jorma kala <jjkk73@...> wrote:
> Hi,
> I'm trying to write a re pattern to match a list of one or more numbers,
> each number is in the range of 1-15 value and the numbers are separated by
> spaces (but there are no spaces at the beginning and end of the string). For
> instance:
>
> "3"
> "1 14 8"
>
> but not:
>
> "22"
> " 5 11"
>
> I've come up with something like this
>
> re.compile("^((([1-9])|(1[0-8]))( +(?=[1-9]))*)+$")
>
> but I can't believe this has to be so complicated.


Your format seems so simple I have to ask why you're using regexes in
the first place.

try:
    nums = [int(num) for num in line.split(" ")]
except ValueError:
    print "Invalid input"

for num in nums:
    if num < 1 or num > 15:
        raise ValueError, "Number present which is outside of valid range"

Cheers,
Chris

--
http://blog.rebertia.com


--
http://mail.python.org/mailman/listinfo/python-list

Parent Message unknown Re: Defining re pattern for matching list of numbers

by Steven D'Aprano-7 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Fri, 06 Nov 2009 10:16:31 -0800, Chris Rebert wrote:

> Your format seems so simple I have to ask why you're using regexes in
> the first place.

Raymond Hettinger has described some computing techniques as "code
prions" -- programming advice or techniques which are sometimes useful
but often actively harmful.

http://www.mail-archive.com/python-list%40python.org/msg262651.html

As useful as regexes are, I think they qualify as code prions too: people
insist on using them in production code, even when a simple string method
or function would do the job far more efficiently and readably.



--
Steven
--
http://mail.python.org/mailman/listinfo/python-list