忽略空格和短划线并仅捕获特定长度的数字

时间:2017-01-31 22:28:12

标签: regex

我有一个场景,其中我有一个包含一系列数字,空格或短划线的字符串。我想捕获长度在14到16之间的数字组。我试过各种组合,如下,

 1. [0-9](?:[- ]?){14,16}
 2. [0-9]([- ]?){14,16}
 3. [0-9]{15,16}|[0-9]{4}.?[0-9]{4}.?[0-9]{4}.?[0-9]{3,4}|[0-9]{4}([\\ \\-]?)[0-9]{4}\1[0-9]{4}[ ]?[-]?[ ]?[0-9]{3,4}|[0-9]{14}|[0-9]{4}([\\ ?|\\-?]?)[0-9]{4}\1[0-9]{4}\1[0-9]{4}

我的输入字符串是"我的数据包含字符串34567892345567345678923455673434567892345563434 5678 92345-56734--567 8923---4556-73434567-8923 455634 "

唯一的常数是后续数字的长度为14,15或16.我的输出应该捕获以下组,

 1. 34567892345567
 2. 3456789234556734
 3. 345678923455634
 4. 34 5678  92345-567
 5. 34--567   8923---4556-734
 6. 34567-8923 455634

请建议正则表达式捕获上述群组。

2 个答案:

答案 0 :(得分:1)

你在附近跳舞。

([0-9][- ]*){14,16}

说明:

(__________){14,16}发生了14到16次...... _[0-9]_____________一个数字,然后是......
______[- ]*________ 0个或更多个连字符或空格

注意:这将在末尾包含空格和连字符,但不包括开头。要在开头包含空格和连字符,请使用:

[- ]*([0-9][- ]*){14,16}

要在末尾排除空格和连字符,请使用:

([0-9][- ]*){13,15}[0-9]

答案 1 :(得分:0)

我会使用以下模式:

(\d[ -]*?){14,16}

确保在模式中包含?以使其不贪婪。这样你的捕获组就不会包含尾随空格。

https://regex101.com/r/JMNErk/1