我用正则表达式和java搜索一个方法,用一些单词找到一个文本行而没有其他单词。
例如,我想获得包含单词冰雪的行,但不包含树和滑雪。字顺序并不重要。
我开始用冰雪细纹
(ice)*(snow)
这似乎有效,但如果订单被颠倒,则无效。
编辑:
是否可以返回单词ice and snow之间有3个字母或更多字母的单词
答案 0 :(得分:2)
我认为regex
在这种情况下会有些过分,只需使用String
类的String.contains()
方法。
String str = "line contains ice and snow";
if(str.contains("ice") && str.contains("snow"))
System.out.println("contains both");
else
System.out.println("does not contain both");
输出= contains both
String str = "line contains ice";
if(str.contains("ice") && str.contains("snow"))
System.out.println("contains both");
else
System.out.println("does not contain both");
输出= does not contain both
答案 1 :(得分:1)
我同意@RanRag的说法,在这种情况下正则表达式是矫枉过正的,但无论如何它都是如何完成的:
(?=.*\bice\b)(?=.*\bsnow\b)(?!.*\btree\b)(?!.*\bski\b)
(?=...)
是一个积极的前瞻,而(?!...)
是一个负向前瞻。正则表达式还使用单词边界\b
,这样它就不会匹配部分单词。