2014-05-08 220 views
0

我使用VB.NET正則表達式對象,並試圖以下文本匹配:正則表達式忽略空格

(99- 13014- 0127) 

我所要的輸出是:99-13014-0127(無空格和括號)。我也希望匹配的字符串被存儲在名爲「field」的組中,因爲它將被自動提取。問題是我不能從結果中排除空格。從理論上講,按照MSDN中,非捕獲基團「(?:表達)」應適用於我「當量詞被施加到一組的非捕獲組構建體通常使用的,而是由組捕獲的子串是沒有興趣「。但是,我仍然在結果中獲得空間。

這裏是我使用的模式:

\((?<field>\d{1,6}(?:\s*)-(?:\s*)\d{1,6}(?:\s*)-(?:\s*)\d{1,6})\) 

我得到了上面的文字和圖案的結果是:

99- 13014- 0127 

什麼是正確的表達式中使用,讓我:99-13014-0127沒有空格?

感謝

+0

我很欣賞的評論,但我一直在尋找這樣做一步到位。我的應用程序的結構方式是,每個字段存儲在數據庫中的正則表達式模式和VB代碼自動調用正則表達式提取過程。我正在尋找一種獲取所需字符串而不更改VB代碼的方法。它看起來不能完成。 – Ahmad

+0

即使奧利弗的回答需要更換,那麼也許你可以使用一個替代,並有另一場在數據庫中,以表明空間應該被刪除。或者包含要刪除的字符的可空字段。 –

回答

0

我建議你這樣做:

var newStr = "match".Replace(" ",""); 

這將是一個很好的解決方案,因爲它不包含空格和它的工作不使用regex

1

「非捕獲組」是指,這個表達式將不會出現在組集合中;但這並不意味着結果將被排除在其他附屬組別之外。

相反,使用lookarounds和應用的字符串替換的結果。查找表格查找所需結果模式前後的模式。

string result = Regex.Match(input, @"(?<=\()\d{1,6}s*-\s*\d{1,6}\s*-\s*\d{1,6}(?=\))") 
        .Replace(" ",""); 

正則表達式模式使用圖案(?<=prefix)find(?=suffix)其中prefixsuffix和是周邊括號\(\)find是用於數的模式。結果中不包括前綴和後綴。因此,不需要將結果捕獲到指定的組中。