Regex to match digits of specific length
Question:
I am looking to match a 15 digit number (as part of a larger regex string). Right now, I have
ddddddddddddddd
but I feel like there must be a cleaner way to do this.
Answers:
If your regex language is Perl-compatible: d{15}
.
It is difficult to say how handle the edges (so you don’t accidentally grab extra digits) without knowing the outer context in which this snippet will be used. The definitive context-independent solution is this:
(?<!d)d{15}(?!d)
You can put this in the middle of any regex and it will match (and only match) a sequence of exactly 15 digits. It is, however, quite awkward, and usually unnecessary. A simpler version that assumes non-alphanumeric boundaries (e.g., whitespace around the digits) is this:
bd{15}b
But it won’t work if the letters immediately precede or followed the sequence.
You can generally do ranges as follows:
d{4,7}
which means a minimum of 4 and maximum of 7 digits. For your particular case, you can use the one-argument variant, d{15}
.
Both of these forms are supported in Python’s regular expressions – look for the text {m,n}
at that link.
And keep in mind that d{15}
will match fifteen digits anywhere in the line, including a 400-digit number. If you want to ensure it only has the fifteen, you use something like:
^d{15}$
which uses the start and end anchors, or
^D*d{15}D*$
which allows arbitrary non-digits on either side.
There, are two ways i have, to limit numbers.
using len,
num = 1234
len(str(num)) <= 4
This output will be True / False.
using regular expression,
import re
num = 12324
re.match(r'(?:(?<!d)d{4}(?!d))', str(num))
The output will be regular expression object or None.
I am looking to match a 15 digit number (as part of a larger regex string). Right now, I have
ddddddddddddddd
but I feel like there must be a cleaner way to do this.
If your regex language is Perl-compatible: d{15}
.
It is difficult to say how handle the edges (so you don’t accidentally grab extra digits) without knowing the outer context in which this snippet will be used. The definitive context-independent solution is this:
(?<!d)d{15}(?!d)
You can put this in the middle of any regex and it will match (and only match) a sequence of exactly 15 digits. It is, however, quite awkward, and usually unnecessary. A simpler version that assumes non-alphanumeric boundaries (e.g., whitespace around the digits) is this:
bd{15}b
But it won’t work if the letters immediately precede or followed the sequence.
You can generally do ranges as follows:
d{4,7}
which means a minimum of 4 and maximum of 7 digits. For your particular case, you can use the one-argument variant, d{15}
.
Both of these forms are supported in Python’s regular expressions – look for the text {m,n}
at that link.
And keep in mind that d{15}
will match fifteen digits anywhere in the line, including a 400-digit number. If you want to ensure it only has the fifteen, you use something like:
^d{15}$
which uses the start and end anchors, or
^D*d{15}D*$
which allows arbitrary non-digits on either side.
There, are two ways i have, to limit numbers.
using len,
num = 1234
len(str(num)) <= 4
This output will be True / False.
using regular expression,
import re
num = 12324
re.match(r'(?:(?<!d)d{4}(?!d))', str(num))
The output will be regular expression object or None.