2012-02-12 72 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

相關問題