【问题标题】:Regex to Split String and Group by Prefix正则表达式拆分字符串并按前缀分组
【发布时间】:2020-09-08 18:55:08
【问题描述】:

这个“几乎”完全有效:\b(?:may )?contains? \w+(?:[,; ]+?\w+){2}\b

与以下匹配:

  • 可能包含 A、B、C
  • 包含 X、Y、Z
  • 包含 X、Y、Z
  • 可能包含 A B C 包含 X;Y Z
  • 可能包含 A、B、C
  • 可能包含 A 和 B; C; D
  • 可能包含 A 和 B、C、D 和 F 包含 1、2、3

除了最后两个之外,一切都正常,它们只对“B”执行第一个匹配(可能包含 A 和 B)

我基本上需要拆分 May Contain(s) 或 Contains 上的句子。它们可以按任何顺序排列,之后/之间的文本变化很大。

所以,我想将每个匹配项分开,例如 (MAY CONTAINs ...) 和/或 (CONTAINs ...)。

我用这个答案作为我的基础Regex to split and group based on specific phrases

【问题讨论】:

  • 您的问题忽略了一些非常关键的问题:您希望从上面给出的每个输入中提取什么,或者应该输出什么?
  • 我以为我在上一个问题中引用过,我基本上期待一组匹配项,每个匹配项都以“可能包含”...或“包含”...开头,文本直到下一个匹配项.在最后一个项目符号中,我希望有 2 个匹配项 - “可能包含 a 和 b、c、d 和 f”和“包含 1,2、3)
  • 很好,我的评论是否为您澄清了输出?
  • 您可能不喜欢我的 cmets,但恕我直言,它可以让您的问题更清晰,从而增加您更快获得答案的机会。
  • CONTAIN x and y, may contain c, d and e 是一个有效的输入吗?

标签: java regex


【解决方案1】:

根据您输入的多样性,您可能会发现此正则表达式更加灵活。它匹配一个可选地以may 开头的字符串,然后是contain 和可选的s,然后是直到字符串结尾或另一个以相同模式开头的字符串:

\b(?:may )?contains?.*?(?=\b(?:may )?contains?|$)

Demo on regex101

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    相关资源
    最近更新 更多