【问题标题】:Regex to match digits of specific length正则表达式匹配特定长度的数字
【发布时间】:2011-06-17 00:46:52
【问题描述】:

我希望匹配一个 15 位数字(作为更大的正则表达式字符串的一部分)。现在,我有

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

但我觉得必须有一种更清洁的方法来做到这一点。

【问题讨论】:

标签: python regex


【解决方案1】:

您通常可以按如下方式执行范围:

\d{4,7}

表示最少 4 位,最多 7 位数字。对于您的特定情况,您可以使用单参数变体\d{15}

Python's regular expressions 支持这两种形式 - 在该链接中查找文本 {m,n}

请记住,\d{15} 将匹配行中任意位置的 15 位数字,包括 400 位数字。如果你想确保它只有十五个,你可以使用类似的东西:

^\d{15}$

使用开始和结束锚点,或者

^\D*\d{15}\D*$

它允许任意一侧的非数字。

【讨论】:

  • 是的,那是我的问题 - 我忘了锚定我的测试。
  • ... 请记住 $ 匹配换行符;请改用\Z
  • 这允许匹配,但也不允许从较长的字符串中提取 x 位数字。
【解决方案2】:

如果您的正则表达式语言与 Perl 兼容:\d{15}

如果不知道使用这个 sn-p 的外部上下文,很难说如何处理边缘(这样你就不会意外地抓住多余的数字)。最终的独立于上下文的解决方案是这样的:

(?<!\d)\d{15}(?!\d)

您可以将它放在任何正则表达式的中间,它会匹配(并且只匹配)正好 15 位数字的序列。然而,这很尴尬,而且通常是不必要的。假设非字母数字边界(例如,数字周围的空格)的更简单版本是这样的:

\b\d{15}\b

但如果字母紧跟在序列之前或之后,它将不起作用。

【讨论】:

  • 使用内置的python正则表达式库。
  • 您的答案是最好的,因为它也允许从较长的字符串中匹配和提取 x 位数字。
【解决方案3】:

我有两种方法来限制人数。

使用 len

num = 1234
len(str(num)) <= 4

此输出将为 True / False。

使用正则表达式

import re
num = 12324
re.match(r'(?:(?<!\d)\d{4}(?!\d))', str(num))

输出将是正则表达式对象或无。

【讨论】:

    猜你喜欢
    • 2012-03-27
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    相关资源
    最近更新 更多