正则表达式匹配字符串列表并忽略字符串列表

时间:2017-12-05 09:16:44

标签: java regex string

我正在寻找符合以下要求的正则表达式

  1. 忽略以zzTest
  2. 开头的所有字符串
  3. 匹配包含单词rest而不是以zzTest
  4. 开头的所有字符串

    输入字符串:

    zzTest.docs:service1
    zzTest.rest:service2
    Regression.rest:service1
    Regression.docs.service2 
    

    预期产出:

    Regression.rest:service1
    

    尝试使用正则表达式\ s *(?!\ w *(zzTest)\ w *)\ w *(rest)\ w * \ s * 当输入字符串

    中没有点(。)时,它可以工作

    任何帮助表示赞赏

2 个答案:

答案 0 :(得分:2)

您可以使用

s.matches("(?!zzTest).*rest.*")

该模式将如下工作:

  • ^ - 字符串的开头(隐含在matches
  • (?!zzTest) - 不以zzTest
  • 开头
  • .*rest.* - 除了换行符之外的任何0 +字符,尽可能多,直到行中的最后rest,然后是该行的其余部分。
  • $ - (隐含在matches()中):字符串结束。

要匹配整个字符串,请在模式的开头添加(?s)

要扩展它,请使用替换:

s.matches("(?!zzTest|yyTest|etc).*(?:rest|more here).*")

要添加全字匹配支持,请在单词周围使用\b

s.matches("(?!\\b(?:zzTest|yyTest|etc)\\b).*\\b(?:rest|more here)\\b.*")

答案 1 :(得分:1)

试试这个:

stringList.stream().filter(s -> !s.startsWith("zzTest")).filter(s -> s.contains("rest"));

虽然这不是正则表达式解决方案。