正则表达式匹配偶数集

时间:2019-02-08 20:50:54

标签: regex

对此我有点困惑,也许你们中的一个/某些人可以为我提供一些见识。

我正在尝试匹配1到5组之间的双位数[0-9],数字顺序根本没有关系,所以\d可以正常工作。因此,最小数量为2,最大数量为10。

有效示例:

03
11
2112
1234
945312
234902
12481352
89024589
2348253415
1349843523

无效的示例:

1
123
23490
8902458
134984352
252049568278
234092538134123508

我考虑过/(\d{1,5}){2}/,但是可以匹配123,这对我的用例而言是无效的。

显而易见的解决方案是:/(\d{2}|\d{4}|\d{6}|\d{8}|\d{10})/

我想知道是否有比我的基本方法更好的答案。

我故意没有在示例中使用^$,因为这是我正在处理的较大表达式的一部分。更具体地说,为了匹配MGRS东移和北移数字集,有一些已发布的代码on this gist line 57,但是^\d{1,2}[^ABIOYZabioyz][A-Za-z]{2}([0-9][0-9])+会匹配10个以上的结尾数字,这是无效的。

如果您不熟悉MGRS,我会怀疑很多人都是这样。

1234567890
├───┘├───┘
│    └─ Northing
└────── Easting

12345678
├──┘├──┘
│   └─ Northing
└───── Easting

123456
├─┘├─┘
│  └─ Northing
└──── Easting

1234
├┘├┘
│ └─ Northing
└─── Easting

12
│└─ Northing
└── Easting

3 个答案:

答案 0 :(得分:4)

您可以使用单词边界,因为基于较大的上下文,行首和尾行对您不起作用。然后,您只需在1到5组数字对之间进行匹配即可。像这样:

\b(\d{2}){1,5}\b

答案 1 :(得分:2)

您可以使用此正则表达式:

\b(?:\d\d){1,5}\b

RegEx Demo

RegEx详细信息:

  • \b:单词边界
  • (?:\d\d){1,5}:匹配1至5组数字对
  • \b:单词边界

答案 2 :(得分:1)

我不是正则表达式的掌握者,但是您可能会做类似/(\d{2}){1,5}/的操作来要求2套,而允许1-5套2套吗?