如何使用正则表达式匹配恰好三个连续数字?

如何使用正则表达式匹配恰好三个连续数字?
最新回答
ヤ偽妳變乖

2026-10-31 13:17:02

要使用正则表达式匹配恰好三个连续数字(既不能少于三个也不能多于三个),需确保匹配的数字序列前后均无其他数字字符。以下是解决方案及详细说明:

正则表达式(?<!d)d{3}(?!d)
  • (?<!d):负向后顾断言,确保匹配的数字序列前面没有数字字符。
  • d{3}:匹配恰好三个连续数字(d等价于[0-9])。
  • (?!d):负向前瞻断言,确保匹配的数字序列后面没有数字字符。
Python 示例代码import redata = [ '123', # 匹配 '123u', # 匹配 'u123', # 匹配 'x123y', # 匹配 '1234', # 不匹配(多于3个数字) 'x1234y', # 不匹配(多于3个数字) '12', # 不匹配(少于3个数字) '123y456', # 匹配两个独立的三数字序列]for s in data: matches = re.findall(r'(?<!d)d{3}(?!d)', s) print(f"'{s}': {matches}")输出结果'123': ['123']'123u': ['123']'u123': ['123']'x123y': ['123']'1234': []'x1234y': []'12': []'123y456': ['123', '456']关键点说明
  1. 边界控制

    (?<!d) 和 (?!d) 确保数字序列是独立的,避免匹配到更长数字串中的部分(如 1234 中的 123)。

  2. 严格匹配长度

    d{3} 强制匹配三个数字,不可多或少。若需匹配其他长度(如4个数字),修改为 d{4}。

  3. 非数字字符处理

    正则表达式允许数字前后出现非数字字符(如字母、符号等),但会排除连续数字的情况。

常见问题
  • 为什么 [^0-9]*[0-9]{3}[^0-9]* 不适用?该表达式会匹配包含至少三个数字的序列(如 1234 中的 123),无法严格限制长度。

  • 如何匹配字符串中唯一的三个数字?若需整个字符串仅为三个数字,使用 ^ 和 $ 锚定:

    ^d{3}$

通过上述方法,可精准匹配符合条件的三数字序列,适用于数据清洗、格式验证等场景。