正则表达式:订单有关系吗?

时间:2012-07-05 16:15:10

标签: regex

我试图从电话号码中删除所有非数字字符。

所以,假设我们有这种格式的数字:“(123)456-7890”。

Regex.Replace(phone, @"[ -()]", string.Empty)

将短划线留在。与()\ _ \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n转换(“\(\)”)。

这个

Regex.Replace(phone, @"[() -]", string.Empty)

虽然有效。

我认为[]中的字符顺序不起作用?事实上,如果我切换空间并且四处奔波,我会得到相同的结果..但是括号必须首先工作?

3 个答案:

答案 0 :(得分:4)

-可用于声明范围,例如[a-z]。你需要逃避它:[ \-()]

例外情况是,如果您将短划线放在字符组的末尾,其唯一含义可以是文字-

答案 1 :(得分:3)

-是此上下文中的特殊字符,表示范围(例如[a-zA-Z0-9])。当它出现在最后时,它不能表示范围,因此可以正常工作。

正确的解决方案是使用反斜杠来逃避它:\-

答案 2 :(得分:3)

连字符的位置很重要,因为在字符类([])内使用连字符来表示范围,例如a-z。因此,最后使用连字符,正则表达式引擎知道您不打算在某个范围内使用短划线,因为之后没有任何内容。见http://www.regular-expressions.info/charclass.html