我正在寻找符合以下要求的正则表达式
输入字符串:
zzTest.docs:service1
zzTest.rest:service2
Regression.rest:service1
Regression.docs.service2
预期产出:
Regression.rest:service1
尝试使用正则表达式\ s *(?!\ w *(zzTest)\ w *)\ w *(rest)\ w * \ s * 当输入字符串
中没有点(。)时,它可以工作任何帮助表示赞赏
答案 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"));
虽然这不是正则表达式解决方案。