2016-05-21 27 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                                       
}