Regex to match digits of specific length

前端 未结 3 1148
太阳男子
太阳男子 2020-11-29 04:51

I am looking to match a 15 digit number (as part of a larger regex string). Right now, I have

\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d

相关标签:
3条回答
  • 2020-11-29 05:01

    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.

    0 讨论(0)
  • 2020-11-29 05:07

    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:

    \b\d{15}\b
    

    But it won't work if the letters immediately precede or followed the sequence.

    0 讨论(0)
  • 2020-11-29 05:11

    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.

    0 讨论(0)
提交回复
热议问题