我正在尝试创建一个正则表达式来解析字符串中的 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"
最佳答案
由于您使用的是支持它们的语言,因此请使用负面环视:
"(?<!\\d)\\d{5}(?!\\d)"
这些将断言您的 \\d{5}
前面或后面都没有数字。无论是由于字符串的边缘还是非数字字符,都无关紧要。
请注意,这些断言本身是零宽度匹配。所以这些字符实际上不会包含在匹配中。这就是它们被称为后视和前视的原因。他们只是检查那里有什么,实际上并没有把它作为比赛的一部分。这是使用 \\D
的另一个缺点,它会在您的匹配中包含非数字字符(或要求您使用捕获组)。
关于Java正则表达式,用于字符串中任意位置的恰好5位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13130605/