【问题标题】:Java Regular Expression for number of exactly 5 digits anywhere in the stringJava 正则表达式,用于字符串中任意位置的正好 5 位数字
【发布时间】:2012-10-29 22:30:42
【问题描述】:

我正在尝试创建一个正则表达式来解析一个字符串中的 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"

【问题讨论】:

    标签: java regex


    【解决方案1】:

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

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

    这些将断言您的\\d{5} 既不在数字之前也不在数字之后。这是由于字符串的边缘还是非数字字符无关紧要。

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

    【讨论】:

    • 感谢您的快速回复!这似乎正是我所需要的(使用 Java 所以它支持)
    • @Mrc0113,是的,这就是为什么我写“既然你使用的语言......”而不是“如果你使用......”;)(事实上,我首先阅读 Javascript 而不是Java,只支持lookaheads;这就是我在编辑答案后添加这句话的原因)
    猜你喜欢
    • 2023-01-12
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    相关资源
    最近更新 更多