我的正则表达式是中文。我更喜欢写这段代码。 然而,如果我想用正则表达式替换这个代码,它的最佳正则表达式匹配是什么?
if (strValue.Contains(",") || strValue.Contains("-") || strValue.Contains("+") || strValue.Contains(".") || strValue.Contains("!") ||
strValue.Contains("@") || strValue.Contains("#") || strValue.Contains("$") || strValue.Contains("%") || strValue.Contains("*") ||
strValue.Contains("(") || strValue.Contains(")") || strValue.Contains("}") || strValue.Contains("{") || strValue.Contains("`") ||
strValue.Contains("\"") || strValue.Contains("^") || strValue.Contains("&") || strValue.Contains("[") || strValue.Contains("]") ||
strValue.Contains("=") || strValue.Contains("+") || strValue.Contains("!") || strValue.Contains(";") || strValue.Contains(":") ||
strValue.Contains("|"))
{
return false;
}
答案 0 :(得分:2)
符合您条件的正则表达式将是:
@"[,+.!@#$%*()}{`\\^&[\]=+!;:|-]"
[...]
表示一个字符类。 此类中的任何字符都将与输出匹配。
-
必须首先或最后(或必须转义),因为正则表达式允许您以[a-z]
答案 1 :(得分:0)
怎么样:
^[^,\-\.!@#\$%\(\)\{\}`\\\^&\[\]=!;:|+\*]+$
http://rubular.com/r/EfsarXwG8I
如果你的字符串符合这个正则表达式,那就很好。
这真的不复杂:
`^` start of string
`[^....]` match all characters NOT inside this class
`+` match one of more (use * instead if you want to pass empty strings)
`$` end of string
方括号(第一个^
除外)之间的所有内容都是您要拒绝的字符列表,其中一些需要转义的皱纹(\
)因为它们在正则表达式语言中有特殊含义。
编辑:实际上,我可能因为逃避而过度使用它,我认为只有-
,[
,]
和\
需要转义,但在这种情况下过于谨慎似乎没什么坏处。
答案 2 :(得分:-2)
嗯,简短的回答是这样的:
Match match = Regex.Match(input, @"[\,\-\+\.\!\@\#\$\%\*\(\)\{\}\`]", RegexOptions.IgnoreCase);
if (match.Success) {
return false;
}
但是,我几乎可以肯定,选择“任意列表标点符号排除”的方法可能是错误的做法。你只想要允许一组数字,字符和(可能)下划线吗?如果是这样,我会只搜索你想要的字符,而不是你想要你不想要的字符列表。 (如果输入包含印地语字符(例如हिन्दी)会怎样?)您的示例和关联的正则表达式将允许这些字符 - 您可能不希望它们。