我使用正则表达式和java搜索一种方式来查找带有某个单词而没有其他单词的文本行。查找带有一些单词的行并且没有其他
例如,我想获得包含词冰和雪但不包含树和滑雪的线。字顺序并不重要。
我beginned细符合冰雪
(ice)*(snow)
,似乎可行,但如果顺序被倒置,不工作。
编辑:
是它可能返回字谁有字冰雪
我使用正则表达式和java搜索一种方式来查找带有某个单词而没有其他单词的文本行。查找带有一些单词的行并且没有其他
例如,我想获得包含词冰和雪但不包含树和滑雪的线。字顺序并不重要。
我beginned细符合冰雪
(ice)*(snow)
,似乎可行,但如果顺序被倒置,不工作。
编辑:
是它可能返回字谁有字冰雪
我@RanRag同意,正则表达式是矫枉过正在这种情况下,但这里是如何将其反正做:
(?=.*\bice\b)(?=.*\bsnow\b)(?!.*\btree\b)(?!.*\bski\b)
(?=...)
是一个积极的lookahead和(?!...)
是负面预测。正则表达式也使用单词边界\b
,以便它不匹配单词的部分。
它似乎有问题。我试着用一个文件包含这个文本:你好冰雪 测试雪 冰雪树滑雪 雪冰滑雪树 测试雪冰我扫描这个文件一行行...匹配器被发现13次... ..应该被发现只有2次.... – 2012-02-12 22:01:52
我不能从你的评论告诉你的文件包含的内容,逐行。 – MRAB 2012-02-14 01:47:52
我认为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
使用字符串是我的第一选择,但是我想提高我对正则表达式的了解,也需要很多代码 – 2012-02-14 11:46:19
这真的不是正则表达式擅长的东西。尤其是考虑如何使用字符串搜索来实现这个小事(并且更快).. – Voo 2012-02-12 20:26:13