2013-10-21 57 views
3

我需要一個正則表達式,它只允許字母數字字符並刪除某些全字。正則表達式來刪除字符和提供的字

實施例:

輸入字符串:這此結果約翰尼拉-bravo's-隆重-DAD

結果字符串:約翰尼拉-BRAVOS-DAD

字/字符通過更換一個空字符串:這是,',盛大

這是我到目前爲止:

var input = "this-is-johny-bravo's-grand-dad"; 
var regex = new Regex(@"([^a-z0-9\-][\b(this|is|grand)\b]?)"); 
var result = regex.Replace(input, ""); 

結果似乎沒有撇號,但不幸的是仍然包括被拒絕的全文。

回答

3

你還需要的字符類添加到交替:

new Regex(@"\b(this|is|grand)\b-?|[^a-z0-9-]"); 
+0

+1這可能是更重要的OP比我的意圖。 :) – Tomalak

+0

(儘管表達式中仍然存在語法錯誤,並且不會刪除多餘的破折號) – Tomalak

+0

看起來不錯,我只需要移除多餘的')'括號。謝謝! –

3

你表達過於複雜。嘗試

\b(this|is|grand|')\b-?

此外,這是您的問題的根本原因:字符類不適用於交替。這[\b(this|is|grand)\b]在語法上等效於[()adghinrst|]

關於它的思考,你可能希望這樣的:

(\b(this|is|grand)\b|[^a-z0-9-])-?

擊穿:

 
(       # group 1 
    \b(this|is|grand)\b # any of these words 
    |      # or 
    [^a-z0-9-]    # any character except one of these 
)       # end group 1 
-?       # optional dash at the end 
+0

爲'''字邊界工作?我的意思是我不確定這一點。否則這是很好的縮短版本。 –

+0

@Rohit是的,意外。單詞邊界是雙向的,一個立即出現在''(單詞「bravo」的末尾)和一個單詞之後(單詞「s」的開頭)。但這不是OP *意味着什麼*,所以忘記短版並採取更長的版本。 – Tomalak

+0

感謝您的解釋塊,它確實有助於理解語法。 –

相關問題