正则表达式以匹配用“”分隔的两位数字集

问题描述

我正在尝试匹配正则表达式以仅选择

两位数后跟可选的“。”后跟两位数字,后跟可选的“。”后跟两位数字,后跟可选的“。”后跟两位数字。

例如,如果输入数据是:

12.45.7810
12345678
12.34.56.78
1.234.56.78
12.45.7816 

预期匹配为:

12345678
12.34.56.78

我正在摸索以了解为什么以下错误:

^\d{2}\.*\d{2}\.*\d{2}\.*\d{2}$

我对正则表达式的理解如下:

^是行的开头
后跟两位数字,后跟零个或多个.字符,
后跟两位数字,后跟零个或多个.字符,
后跟两位数字,后跟零个或多个.字符,
后跟两位数字
随后是行$的结尾。

但是,这与12.45.7816

之类的行匹配

解决方法

由于\.*匹配7816之间的空字符串,因此12.45.7816匹配。

仅当所有数字对之间都存在点时才匹配点,否则仅不匹配点,可以使用

^\d{2}(?:(?:\.\d{2}){3}|\d{6})$

请参见its graph

enter image description here

请参见regex demo

详细信息

  • ^-字符串的开头
  • \d{2}-两位数字
  • (?:(?:\.\d{2}){3}|\d{6})-两种选择之一:
    • (?:\.\d{2}){3}-出现三个点,后跟两位数字
    • |-或
    • \d{6}-六位数
  • $-字符串结尾

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...