【问题标题】:Regex Match substring if said substring contains another word如果所述子字符串包含另一个单词,则正则表达式匹配子字符串
【发布时间】:2021-06-23 18:13:15
【问题描述】:

示例字符串

Apple, Pinapple, NONE\nOrange, Pears, Apples\nMango, None, Banana\nLemon, NONEDLE, Grape

我试过的正则表达式

(?<=\\n)(.*?)(?=\\n) - 这匹配每个子字符串,但我不知道如何只匹配其中包含 NONE 的子字符串

想要的结果

我试图构建一个正则表达式,它将匹配示例字符串中的每一行(一行在 \n 到另一行之间)。 但是,我希望它仅在该行包含单词 NONE 作为整个单词时才匹配。我曾尝试对 Regex Match text within a Capture Group 的结果进行逆向工程,但未能成功。

我正在编写一个 java 方法,该方法应该删除与正则表达式匹配的部分字符串。

任何帮助将不胜感激!!!

【问题讨论】:

标签: java regex string regex-group regexp-replace


【解决方案1】:

试试这个。

String input = "Apple, Pinapple, NONE\nOrange, Pears, Apples\nMango, None, Banana\nLemon, NONEDLE, Grape";
input.lines()
    .filter(s -> s.matches(".*\\bNONE\\b.*"))
    .forEach(System.out::println);

输出

Apple, Pinapple, NONE

【讨论】:

    【解决方案2】:

    在 NONE 的任一侧使用单词边界:

    "(?m)^.*\\bNONE\\b.*$"
    

    启用多行标志后,^ 和 $ 匹配行的开头和结尾,并且由于 dot 不匹配换行符,这将匹配整行,其中 NONE 是它们。

    将此正则表达式与匹配器一起使用;每次调用 find() 都会给你你想要的行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      • 2011-07-22
      相关资源
      最近更新 更多