如果所述子字符串包含另一个单词,则正则表达式匹配子字符串

Posted

技术标签:

【中文标题】如果所述子字符串包含另一个单词,则正则表达式匹配子字符串【英文标题】: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 方法,该方法应该删除与正则表达式匹配的部分字符串。

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

【问题讨论】:

检查this Java demo。 【参考方案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() 都会给你你想要的行。

【讨论】:

以上是关于如果所述子字符串包含另一个单词,则正则表达式匹配子字符串的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 - 匹配整个字符串,除非 [重复]

正则表达式匹配一定长度的单词

正则表达式:匹配空格之间的单词

用于检查字符串是不是不应包含某些单词的正则表达式,但如果这些单词前面有“to”或“for”,则这些单词是可以的

通过Python中的正则表达式优化在两个列表之间查找匹配子字符串

将正则表达式匹配转换为字符串列表