Matthew Grima
Matthew Grima

Reputation: 1523

Regex: Comma delimited integers

I'm trying to create a regex that accept: An empty string, a single integer or multiple integers separated by a comma but can have no starting and ending comma.

I managed to find this, but I cannot undertsand how to remove the digit limit

^\d{1,10}([,]\d{10})*$

Upvotes: 16

Views: 17845

Answers (5)

Kamaraju Kusumanchi
Kamaraju Kusumanchi

Reputation: 1964

I would extend tster's answer by making the inner group a non capturing group.

^(\d+(?:,\d+)*)?$

Consider for example

re.search('^(\d+(?:,\d+)*)?$', "1,2,3,4").groups() 
('1,2,3,4',)

which returns a tuple of 1 element. But if the inner group is a capturing group, you get one extra element at the end.

re.search('^(\d+(,\d+)*)?$', "1,2,3,4").groups()
('1,2,3,4', ',4')

Upvotes: 0

TKK
TKK

Reputation: 369

Some of the other answers hit on 4 digits between commas. Here is a slight variation with an optional sign and enforcing 3 digits between commas:

^[+-]?(\d+(,\d{3})*)$

Upvotes: 0

tster
tster

Reputation: 18237

The thing you posted still requires at least 1 integer, so it won't match an empty string:

Here is what you need:

^(\d+(,\d+)*)?$

Explaination:

  1. put the entire thing in parenthesis and end with a '?' so as to match the empty string.
  2. Always start with an integer, so '\d+'. That is 1 or more digit characters ('0'-'9')
  3. Then make a set of parenthesis which contains ',\d+' and put an asterisk after it.
    3a. The inside means start with a ',' then an integer. 3b. The asterisk means repeat everything inside the parenthesis 0 or more times.

Hench the whole thing is either an empty string or start with an integer then repeat zero or more times a string which starts with a comma and ends with an integer

Upvotes: 47

Algirdas
Algirdas

Reputation: 76

Try the following:

^(\d+(,\d+)*)?$

Upvotes: 1

troelskn
troelskn

Reputation: 117487

{1,10} and {10} are ranges. You can replace them with + for infinite-positive. Eg.:

^\d+([,]\d+)*$

Upvotes: 3

Related Questions