2012-09-18 21 views
1

這完美的作品..正則表達式,它允許方括號

result2 = Regex.Replace(result2, "[^A-Za-z0-9/.,>#:\s]", "", RegexOptions.Compiled) 

但我需要讓方括號([])。 這看起來是否正確,以允許括號而不改變什麼是允許的和不允許從上面?

result2 = Regex.Replace(result2, "[^A-Za-z0-9\[\]/.,>#:\s]", "", RegexOptions.Compiled) 

我之所以需要第二個意見是,我認爲,如果這是正確的別的東西阻止它這是在我的掌握。

+0

不確定你的語言,但一般'[] [abc]'是包含字符'] [abc'的字符類。換句話說,首先放置左括號可以消除它的歧義。 – tripleee

+0

當前字符A-Z a-z 0-9 /。 ,>#:允許單個空格,其他所有內容都替換爲「」。我正在嘗試添加允許[和]的功能。我的印象是它必須被包圍在支架中,並且在外面看到了很多像上面那樣的支架的例子。 – Blue68Camaro

+1

你的第二個正則表達式應該可以工作。如果不是,那麼你應該考慮轉義你的反斜槓:''[[A-Za-z0-9 \\ [\\] /。,>#:\ s]「'。我不是.net專家,但這是一個常見問題。 – FrankieTheKneeMan

回答

0

我不能說任何一個人做了或沒回答問題或設法幫助,我想如果我可以,因爲它讓我想到分裂爲不同的人的解決方案。關鍵是通過使用單個\來分開括號。謝謝大家的幫助。

result = Regex.Replace(result, "[^A-Za-z0-9/\[\].,>#\s]", "", RegexOptions.Compiled) 
0

提到的噱頭@tripleee的確在.NET中工作。只要確保]是第一個字符(或在這種情況下,首先^後。

result2 = Regex.Replace(result2, "[^][A-Za-z0-9/.,>#:\s]", ""); 

但要小心移植正則表達式多種口味。有些人把它當作一個語法錯誤,有的會對待它作爲兩個原子:?[^][A-Za-z0-9/.,>#:\s],其中第一個匹配字面上什麼,但什麼 - 即任何字符,包括換行

在一個側面說明,爲什麼您使用的是RegexOptions.Compiled選擇這東西,你應該只使用當你知道你需要它。幾乎不會顯着,並且它具有相當高的價格標籤,如解釋here

http://msdn.microsoft.com/en-us/library/8zbs0h2f.aspx

+0

聽起來像一個當時是個好主意......我之前使用它只允許大寫和小寫az和0-9,所以在這裏使用它似乎合乎邏輯。我不關心性能,所以我可以使用任何有效的工具。 – Blue68Camaro