2

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

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

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

留下破折号。与 () 转义 ("\(\)") 相同。

这个

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

虽然有效。

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

4

3 回答 3

4

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

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

于 2012-07-05T16:18:32.523 回答
3

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

于 2012-07-05T16:20:15.203 回答
3

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

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

于 2012-07-05T16:17:41.883 回答