Regex 雷杰克斯:订单问题?

Regex 雷杰克斯:订单问题?,regex,Regex,我试图从电话号码中去掉所有非数字字符 所以,假设我们有以下格式的数字:“(123)456-7890” 留下破折号。与转义的()相同(“\(\)”) 这个 不过,这很管用 我认为[]中的字符顺序不起作用?事实上,如果我切换空间,四处乱跑,我也会得到同样的结果。。但括号必须先起作用?-在本上下文中是一个特殊字符,表示范围(例如[a-zA-Z0-9])。当它出现在末尾时,它不能表示范围,因此工作正常 正确的解决方案是用反斜杠将其转义:\--可用于声明范围,例如,[a-z]。您需要转义它:[\-()]

我试图从电话号码中去掉所有非数字字符

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

留下破折号。与转义的()相同(“\(\)”)

这个

不过,这很管用


我认为[]中的字符顺序不起作用?事实上,如果我切换空间,四处乱跑,我也会得到同样的结果。。但括号必须先起作用?

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


正确的解决方案是用反斜杠将其转义:
\-

-
可用于声明范围,例如,
[a-z]
。您需要转义它:
[\-()]


例外情况是,如果将破折号放在字符组的末尾,其唯一含义可以是文字
-

连字符的位置很重要,因为连字符在字符类(
[]
)中用于表示范围,例如
a-z
)。因此,对于末尾的连字符,正则表达式引擎知道您不打算在某个范围内使用破折号,因为后面没有任何内容。请参见

使用非数字字符类-\D
Regex.Replace(locationProperties.Phone,@“\D”,string.Empty)可以完全避免此问题
Duh。。我怀疑我忘了什么:)我会接受它作为一个答案尽快让我。
Regex.Replace(phone, @"[ -()]", string.Empty)
Regex.Replace(phone, @"[() -]", string.Empty)