使用正则表达式

时间:2015-05-06 07:57:30

标签: regex

我有一个巨大的数据集,我试图提取一组4位数。问题是,有时会有一个前面的4位数组,我 想要的。这两组永远不会相同。

示例:

String String 7777 Some more string  
String 1234 7777 Some more string

在这两种情况下,我只想提取7777(或任何数字组合替换它)。没有模式可以区分哪个数字组在哪个位置 - 从0000到9999的任何数字都可以位于第一或第二位置。

如果这是可能的,我认为它能做我想做的事情吗?

\b\d{4}{0,1}\s{0,1}(\d{4})\b

可选4位数,可选空格,捕获4位数字。但是我已经尝试了它,以及它的一些变化,但我无法让它发挥作用!

前瞻似乎是一个可能的候选人,但我不明白如何构建模式。

2 个答案:

答案 0 :(得分:2)

您可以使用此表达式匹配四位数组,而不是任何其他四位数组:

\d{4}(?!.+\d{4}.+)

在线测试here

答案 1 :(得分:2)

您可以使用否定前瞻来检查后面是否有后续 4位数字:

\b\d{4}\b(?!\s?\d{4}\b)

请参阅demo

修改

要捕获未跟随任何文本和另一个4位数字的4位数字,您应该使用:

\b\d{4}\b(?!.+\b\d{4}\b)

请参阅demo