我需要忽略下面模式中的空格
XXXXX-XXXXX
其中 x 是0到9之间的任何数字。我尝试了以下正则表达式:(\d{2}+)(|-)(\d{3}+)(|-)(\d{5})
。如果中间存在任何空间,则无效,例如
xx - x xx- xxx xx
xx-xxx-xx xxx
x x- xxx-xxxxx
我在Matlab中使用这个正则表达式。
答案 0 :(得分: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})
答案 1 :(得分: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
}