Reputation: 355
I'm trying to write some script in python (using regex) and I have the following problem:
I need to make sure that a string contains ONLY digits and spaces but it could contain any number of numbers.
Meaning it should match to the strings: "213" (one number), "123 432" (two numbers), and even "123 432 543 3 235 34 56 456 456 234 324 24" (twelve numbers).
I tried searching here but all I found is how to extract digits from strings (and the opposite) - and that's not helping me to make sure weather ALL OF THE STRING contains ONLY numbers (seperated by any amount of spaces).
Does anyone have a solution?
If someone knows of a class that contains all the special characters (such as ! $ # _ -) it would be excellent (because then I could just do [^A-Z][^a-z][^special-class] and therefore get something that don't match any characters and special symbols - leaving me only with digits and spaces (if I'm correct).
Upvotes: 11
Views: 16340
Reputation: 239583
This code will check if the string only contains numbers and space character.
if re.match("^[0-9 ]+$", myString):
print "Only numbers and Spaces"
Upvotes: 17
Reputation: 22616
The basic regular expression would be
/^[0-9 ]+$/
However is works also if your string only contains space. To check there is at least one number you need the following
/^ *[0-9][0-9 ]*$/
You can try it on there
Upvotes: 8
Reputation: 82550
Well I'd propose something that does not use regex
:
>>> s = "12a 123"
>>> to_my_linking = lambda x: all(var.isdigit() for var in x.split())
>>> to_my_linking(s)
False
>>> s = "1244 432"
>>> to_my_linking(s)
True
>>> a = "123 432 543 3 235 34 56 456 456 234 324 24"
>>> to_my_linking(a)
True
In case you're working the lambda
is just a simple way to make a one liner function. If we wrote it using a def
, then it would look like this:
>>> def to_my_linking(number_sequence):
... return all(var.isdigit() for var in number_sequence.split())
...
Upvotes: 1