我使用正則表達式和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