2012-02-12 74 views
0

我使用正则表达式和java搜索一种方式来查找带有某个单词而没有其他单词的文本行。查找带有一些单词的行并且没有其他

例如,我想获得包含词冰和雪但不包含树和滑雪的线。字顺序并不重要。

我beginned细符合冰雪

(ice)*(snow) 

,似乎可行,但如果顺序被倒置,不工作。

编辑:

是它可能返回字谁有字冰雪

+0

这真的不是正则表达式擅长的东西。尤其是考虑如何使用字符串搜索来实现这个小事(并且更快).. – Voo 2012-02-12 20:26:13

回答

1

我@RanRag同意,正则表达式是矫枉过正在这种情况下,但这里是如何将其反正做:

(?=.*\bice\b)(?=.*\bsnow\b)(?!.*\btree\b)(?!.*\bski\b) 

(?=...)是一个积极的lookahead和(?!...)是负面预测。正则表达式也使用单词边界\b,以便它不匹配单词的部分。

+0

它似乎有问题。我试着用一个文件包含这个文本:你好冰雪 测试雪 冰雪树滑雪 雪冰滑雪树 测试雪冰我扫描这个文件一行行...匹配器被发现13次... ..应该被发现只有2次.... – 2012-02-12 22:01:52

+0

我不能从你的评论告诉你的文件包含的内容,逐行。 – MRAB 2012-02-14 01:47:52

2

我认为regex会在这种情况下矫枉过正之间的3个字以上,只是使用String.contains()方法String类。

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

+0

使用字符串是我的第一选择,但是我想提高我对正则表达式的了解,也需要很多代码 – 2012-02-14 11:46:19

相关问题