3

我正在尝试创建一个正则表达式来解析字符串中的 5 位数字,无论它在哪里,但我似乎无法弄清楚如何获取开始和结束的情况。

我使用了如下模式,\\d{5}但这将获取更大数字的子集......但是当我尝试做类似的事情时,\\D\\d{5}\\D它不适用于最终情况。我会很感激这里的任何帮助!谢谢!

对于一些示例(55555应该提取的内容):

At the beginning of the string
"55555blahblahblah123456677788"

In the middle of the string
"2345blahblah:55555blahblah"

At the end of the string
"1234567890blahblahblah55555"
4

1 回答 1

6

由于您使用的是支持它们的语言,因此请使用否定环视:

"(?<!\\d)\\d{5}(?!\\d)"

这些将断言您\\d{5}的前面或后面都没有数字。这是由于字符串的边缘还是非数字字符无关紧要。

请注意,这些断言本身是零宽度匹配。所以这些字符实际上不会包含在匹配中。这就是为什么它们被称为lookbehind 和lookahead 的原因。他们只是检查那里有什么,而没有真正让它成为比赛的一部分。这是使用的另一个缺点\\D,它会在匹配中包含非数字字符(或要求您使用捕获组)。

于 2012-10-29T22:32:18.843 回答