2009-11-27 68 views
1

我有一個字符串,其中包含帶括號的單詞。我需要從字符串中刪除整個單詞。如何從字符串中刪除單詞?

例如:對於輸入,"car wheels_(four) klaxon"的結果應該是"car klaxon"

有人可以給我一個例子,可以做到這一點嗎?

回答

6

你可以用正則表達式來做到這一點。您需要的正則表達式是:

"\s?\S+[()]\S+\s?" 

這消除含有或任何字任一個(或)兩者,並且將同時刪除單詞和摺疊周邊空白。比賽應該用一個空格替換。

在C#中的正則表達式可以這樣來使用:

string s = "car wheels_(four) klaxon"; 
    s = Regex.Replace(s, @"\s?\S*[()]\S*\s?", " "); 

我不能完全肯定VB翻譯本的,但希望你自己看着辦吧。

+0

你的正則表達式只是讓我的心靈崩潰 – JohnIdol 2009-11-27 19:04:03

+0

一個潛在的問題:即使括號不平衡,這也會匹配任何帶括號的單詞。這可能會或可能不會被期望。 – Welbog 2009-11-27 19:06:19

+0

謝謝馬克,它工作正常,但如果它有一個像「(wheel)」這樣的詞不能代替這個詞:P – 2009-11-27 19:06:28

1

稍有不同:

sed "s/\s\+\S*(.\+)\S*\s\+/ /g" yourfile 

它的工作原理是這樣的:

yourfile:

car wheels_(four) klaxon 
ciao (wheel) hey 
foo bar (baz) qux 
stack overflow_(rulez)_the world 

轉化中:

car klaxon 
ciao hey 
foo bar qux 
stack world 
+1

哇。正則表達式再次統治着這個世界。 http://xkcd.com/208/ – Tonio 2009-11-27 19:22:23

+0

不太合適。在'foo bar(baz)qux'上,你會得到「foo qux」而不是「foo bar qux」。您需要匹配非空白字符以避免匹配多個單詞。 – 2009-11-27 19:32:33

+0

這是另一個測試用例:'foo ba(r baz qu)x quux'。海報沒有具體說明他在這種情況下需要什麼,所以我不知道應該得到什麼樣的正確結果,但是我們在這種情況下的輸出有所不同。 – 2009-11-27 19:51:15

0

如果速度不是問題,你想避免overcomp可以使用String.Split創建一個「單詞」數組,迭代每個單詞,替換任何String.Contains「(」用空字符串,然後使用String.Join作爲分隔符「」來獲得你的結果。

抱歉不能發送codez,手邊沒有VB.NET編譯器。

相關問題