我试图做一个正则表达式为具有至少1个非字母数字符号在它正则表达式的表达式对所有非字母数字符号
我想使用的代码是
Regex symbolPattern = new Regex("?[[email protected]#$%^&*()_-+=[{]};:<>|./?.]");
字符串我只想匹配[email protected]#$%^&*()_-+=[{]};:<>|./?.
中的一个,但它似乎没有工作。
我试图做一个正则表达式为具有至少1个非字母数字符号在它正则表达式的表达式对所有非字母数字符号
我想使用的代码是
Regex symbolPattern = new Regex("?[[email protected]#$%^&*()_-+=[{]};:<>|./?.]");
字符串我只想匹配[email protected]#$%^&*()_-+=[{]};:<>|./?.
中的一个,但它似乎没有工作。
如果要匹配非字母数字符号,请使用\W|_
。
Regex pattern = new Regex(@"\W|_");
这将匹配除0-9和a-z以外的任何内容。有关\W
角色等级和其他可在此处获得的信息。
您可以检查相反的情况?
Match match = Regex.Match(@"^([a-zA-Z0-9]+)$");
if (!match.Success) {
// it's alphanumeric
} else {
// it has one of those characters in it.
}
你也可以避免正则表达式,如果你想:
return s.Any(c => !char.IsLetterOrDigit(c))
现在获得额外的信用:哪个性能更好? – Alan 2010-06-24 21:40:43
嘿嘿..有时你只需要使用正则表达式的一切:)即使我喜欢正则表达式,通常最好避免它们。 – simendsjo 2010-06-24 21:41:02
@Alan - 稍后我会运行一个测试(除非其他人发出响声),但我相信这会更快一些。 – ChaosPandion 2010-06-24 21:45:58
我没有得到你的整个问题,但这正则表达式匹配包含至少一个非字母数字字符那些字符串。这包括空白(虽然看不到你的列表中)
[^\w]+
你的正则表达式只需要很少的调整。连字符用于形成A-Z
等范围,因此如果要匹配文字连字符,则必须使用反斜杠将其转义或将其移至列表的末尾。您还需要转义方括号,因为它们是字符类的分隔符。然后在开始时摆脱这个问号,并且你在做生意。
Regex symbolPattern = new Regex(@"[[email protected]#$%^&*()_+=\[{\]};:<>|./?,-]");
如果你只想匹配ASCII标点符号,这可能是最简单的方法。 \W
除了标点符号之外还匹配空格和控制字符,并且它与整个Unicode范围中的它们匹配,而不仅仅是ASCII。
虽然您似乎错过了几个字符:反斜杠,撇号和引号。添加这些为您提供:
@"[[email protected]#$%^&*()_+=\[{\]};:<>|./?,\\'""-]"
最后,这是一个好主意,始终使用C#的逐字字符串(@"..."
)的正则表达式;它可以为反斜杠节省很多麻烦。引号是通过加倍来逃脱的。
不是为了挑战大师,而是你不是指'\ W'? '\ w'(小写字母w)匹配所有单词字符。 – Alan 2010-06-24 21:38:31
这几乎是完全错误的。 – 2010-06-24 21:42:49
然而,它得到3 upvotes。 – Alan 2010-06-24 21:44:19