2016-05-21 70 views
1

我需要下面的圖案內忽略空間之間的空白無法忽略文本

XXXXX-XXXXX

其中X是0之間的任何數目至9我有嘗試了以下正則表達式:(\d{2}+)(|-)(\d{3}+)(|-)(\d{5})。如果兩者之間存在任何空間,則這不起作用。

XXX XXXXX XX
XXXXX-XX XXX
X X-XXX-XXXXX

我使用這個表達式在Matlab。

+0

你想搭配什麼?它是10位數字嗎? – rock321987

+0

是10號,中間有兩個連字符。 –

回答

1

如果-是強迫,你可以使用

[ ]*((?:[ ]*\d){2}[ ]*-[ ]*(?:[ ]*\d){3}-[ ]*(?:[ ]*\d){5}) 

\s*((?:\s*\d){2}\s*-\s*(?:\s*\d){3}-\s*(?:\s*\d){5}) 

在MATLAB

str = '11 - 1 11- 111 11 11-111-11 111 1 1- 111-11111'; 
expression = '[ ]*((?:[ ]*\d){2}[ ]*-[ ]*(?:[ ]*\d){3}-[ ]*(?:[ ]*\d){5})'; 
matchStr = regexp(str,expression,'match') 

輸出

matchStr =                                 
{                                   
    [1,1] = 11 - 1 11- 111 11                             
    [1,2] = 11-111-11 111                             
    [1,3] = 1 1- 111-11111                             
} 

對於精確匹配10位數字,您可以使用

((?:[- ]*\d){10}) 
+0

謝謝。它像一個魅力。 –

+0

@SimonC很高興,它爲你工作 – rock321987

+0

一個小問題。它接受號碼開始前的空格。有什麼辦法可以預防它嗎? –

0

您可以從字符串中去除空格,則處理前,讓你的結果是自由空間。試試這個:

string = '99-999-99999 8 8 - 8 8 8 - 8 8 8 8 8 77- 777 -77777 6 6 - 6 6 6 - 6 6 6 6 6 BR-549 55-555-55555 rubber meets the road 444 - 444 - 44444'; 
without_spaces = regexprep(string, '\s+', '') 
matched = regexp(without_spaces, '\d{2}-\d{3}-\d{5}','match') 

結果:

matched =                                          
{                                            
    [1,1] = 99-999-99999                                       
    [1,2] = 88-888-88888                                       
    [1,3] = 77-777-77777                                       
    [1,4] = 66-666-66666                                       
    [1,5] = 55-555-55555                                       
    [1,6] = 44-444-44444                                       
}