【问题标题】:Match word followed by space and N number of digits匹配单词后跟空格和 N 位数
【发布时间】:2017-08-23 16:33:48
【问题描述】:

我正在尝试匹配一个单词,后跟一个空格或制表符和 5 个数字。例如

some noise text off 12345 some noise text again.

另一个例子是:

Some noise text off 12345.

正则表达式应匹配“off 12345”。 数字后面可以跟标点符号。 模式应该匹配单词“off”而不是数字后面的任何其他单词。

谢谢

【问题讨论】:

    标签: java android regex


    【解决方案1】:

    你可以像这样使用一个简单的正则表达式

    off\s\d{5}
    

    Working demo

    【讨论】:

    • 感谢费德里科的帮助。它与“测试 12345 测试”不匹配。
    • @Davita,它确实匹配,检查demo here。但是,如果要匹配包含该模式的行,则可以使用 .*off\s\d{5}.*
    • 对不起 Federico,你是对的,它正在工作,这是我在代码中的错误。我现在遇到的一个问题是它匹配六个字符数的前五个部分。例如,它匹配从 1 到 5 的 123456。是否有可能让它不匹配长度大于 5 个字符的数字?谢谢
    • @Davita,是的,你可以使用单词边界字符,比如\boff\s\d{5}\b demo。这使您可以不匹配 oooff 1234567 之类的内容,并将查找 off 12345
    【解决方案2】:

    为了更通用,你可以使用

    \b\w+\s\d{5}\b
    

    这里\b 匹配边界。如果你不使用它,你可能会错误匹配类似的东西

    123off 12345
    off 1234567
    

    【讨论】:

    • 您好,感谢您的回复。对此,我真的非常感激。问题是我正在寻找一个能够完全匹配 5 个十进制数字的正则表达式,而不是更多而不是更少。现在它可以匹配超过 5 个长度的数字。
    • 我在 regex101 上测试了你的例子。似乎没有问题。你们哪一种情况不起作用?
    • 我在 java 上进行测试,我猜不同平台的实现不同?例如,它与“test off 12345 test”不匹配。
    • 这个例子也适用于我。有两个可能的原因。 1.你有多个空格,所以需要\s+。 2. \b 中的反斜杠没有转义,而是匹配了一个退格字符。在 Java 中,正则表达式字符串应该是 "\\b\\w+\\s\\d{5}\\b"。这篇文章可能对你有用。 stackoverflow.com/questions/8777982/issue-with-java-regex-b
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多