2012-10-12 39 views
1

我值状正则表达式:选择空间,如果空间存在

\w{1,2}-\w{1,2}\d{1,4} and \w{1,2}-\w{1,2} \d{1,4} 

我把这些值:

AB-CD 1 -> AB-CD1 
AB-CD1 -> AB-CD1 

我这样做是使用

[ ]{1}[\d]{1} 

和更换 “” 到“ ”。这很好。

但现在我需要做下面的转换:

AB-CD1 -> AB-CD 1 
AB-CD 1 -> AB-CD 1 

我试图前瞻瞄准任何数字

(?=\d) 

但后来我得到两个空间,如果我的文字已经包含一个。我需要选择\ w和\ d之间的空格(或不填) - 我该怎么做?

+0

这是什么语言? (我问,因为许多类型的正则表达式支持向后看,'(?<!)',而很多人不这样做。) – ruakh

+0

另外:我希望你知道'\ w'匹配数字(不只是字母和下划线), '[\ d]'相当于'\ d',并且'{1}'是多余的? – ruakh

+0

这是C#方言。是的,它可能是多余的,但我发现更可读。 – UNeverNo

回答

1

你可以写:

(?<![\d ]) ?(?=\d) 

匹配的可选空间(即空格或空字符串)位置,做跟着一个数字或空间,确实前面一个数字。

(?<!...)负向后断言;见http://www.regular-expressions.info/lookaround.html。)

+0

如果字符和数字之间没有空格,我想选择空格或空字符串。 – UNeverNo

+0

@UNeverNo:我已经更新了我的答案。 – ruakh

+0

感谢这有助于很多。 – UNeverNo

0

您可以使用替代([^\d ])(?=\d)“\ 1”

0

不知道C#..但你可以尝试更换:

([a-zA-Z])([0-9]+) 

\1 \2

小用sed测试:

kent$ echo "AB-CD1"|sed -r 's/([a-zA-Z])([0-9]+)/\1 \2/g' 
AB-CD 1