【问题标题】:Regex multiline to match string followed by text with arbitrary spaces in between正则表达式多行匹配字符串,后跟带有任意空格的文本
【发布时间】:2017-01-05 23:30:23
【问题描述】:

想知道是否有任何正则表达式专家可以帮助弄清楚如何创建正则表达式来解决这个问题。我被难住了。

我需要在这个多行文本的变体上匹配“CUST-X”..

"CUST-1 Some message\nLock-Id: Id74248cd199\n"

要求:

  1. “CUST-1”和“某些消息”可以用冒号 (:) 分隔。这 冒号是可选的。
  2. 之间可以没有、一个或多个空格 两个字符串。
  3. “CUST-1”前面可以有任意数量的空格。
  4. “CUST-1”之后需要有一条消息。消息是 任意,消息没有模式。
  5. 忽略第一个之后的任何其他 CUST-XX。仅匹配第 1 次。
  6. 最好使用 java 正则表达式。

例子:

应与“CUST-1”匹配的测试字符串

"CUST-1 Some message\nLock-Id: Id14248cd199"
"  CUST-1 another message\nLock-Id: Id14258cd199"
"CUST-1:I like apples\nLock-Id: Id84248cd199"
"CUST-1: peaches are sweet\nLock-Id: Id78248cd199"
"CUST-1:    pies are great\nLock-Id: Id71248cd199"

应该匹配“CUST-X”,但不匹配“CUST-X”

"CUST-1: Nice message about CUST-2\nLock-Id: Id74248cd199\n"

不应匹配“CUST-1”的测试字符串

"CUST-1\nLock-Id: Id78248cd199"
"CUST-1  \nLock-Id: Id74248cd199"
"CUST-1:\nLock-Id: Id84248cd199"
"CUST-1:  \nLock-Id: Id94248cd199"

我想出的结局是..

^\\s*([A-Z]+-[0-9]+):?\\s+\\S+

但这也将匹配我不希望匹配发生的情况。

【问题讨论】:

    标签: regex


    【解决方案1】:

    我想这就是你要找的:

    ^\\s*([A-Z]+-[0-9]+):?\\p{Z}+\\S+
    

    \s 匹配任何定义为[\t\n\f\r\p{Z}] 的空白字符,包括\n

    \p{Z} 仅指空白字符本身。

    【讨论】:

    • 谢谢,效果很好。我只发现了一个对我不起作用的情况,我忽略了上面的说明。 "CUST-1 : \nLock-Id: Id94248cd199" 匹配但我不希望它匹配(它在 1 之后有额外的空间)。如果你能更新你的正则表达式来处理这种情况,那就太好了,但没什么大不了的。
    • 也许是^\\s*([A-Z]+-[0-9]+):?\\p{Z}+\\w+,但只有当Some message总是以字母或数字开头时才有效。
    猜你喜欢
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 2017-09-25
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    相关资源
    最近更新 更多