【问题标题】:Regex to split and group based on specific phrases?正则表达式根据特定短语进行拆分和分组?
【发布时间】:2020-05-22 00:28:23
【问题描述】:

我需要编写一个正则表达式,将句子按术语可能包含或包含的内容进行拆分。它可能至少有一个或另一个或两者都有。

  • MAY CONTAIN A,B,C -->(可能包含 a,b,c)
  • 包含 X,Y,Z -->(包含 x,y,z)
  • MAY CONTAIN A,B,C CONTAINS X,Y,Z -->(可能包含 a,b,c)(包含 x,y,z)

如何在 Java 中构建这个正则表达式?另外,“contain”可以是“contain”或“contains”

【问题讨论】:

    标签: java regex


    【解决方案1】:

    你可以使用正则表达式

    \b(?:may )?contains? [a-z](?:,[a-z]){2}\b
    

    设置了大小写无关标志。

    Demo(点击“Java”)

    Java 的正则表达式引擎执行以下操作。

    \b          # match a word break (so 'dismay' is not matched)
    (?:may )    # match 'may ' in a non-capture group
    ?           # optionally match the above non-capture group
    contain     # match 'contain'
    s?          # optionally match 's'
    [a-z]       # match a letter
    (?:,[a-z])  # match ',' then a letter in a non-capture group
    {2}         # execute above non-capture group twice
    \b          # match a word break (to avoid matching 'a,b,cat')
    

    回想一下设置了大小写无关标志。

    【讨论】:

    • 当然这对我的例子来说非常有效。当我将它应用于真正的字符串时,例如“MAY CONTAIN A AND B, C, D. CONTAINS X, y, z”,我在匹配时遇到了问题。
    • 您是否希望允许任何文本出现在“MAY CONTAIN(S)”和“x,y,z”之间(例如,“may contains a dog or a cat x,y,z” ) 还是只有特定的文本,例如“A AND”?如果是后者,那部分字符串中可能会出现什么文本?
    • 组之间的“任何”文本。我正在拆分一个句子,唯一已知的分隔符可能包含或包含(稍后可能会在单词上有所不同)。因此,每个匹配都将从其中一个语句开始,并包含直到下一个匹配的文本。
    • 为此尝试正则表达式(?i)\b(?:may )?contains?.*\b[a-z](?:,[a-z]){2}\b(?i) 设置大小写无关标志。中间的文本不能以单词字符结尾(例如,contain some texta,b,c 将不匹配)。 Demo
    猜你喜欢
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 2019-12-20
    • 2012-01-18
    • 2021-12-27
    相关资源
    最近更新 更多