C#正则表达式不允许使用特殊字符



例如,我有以下字符串:

thats anntestnwith multiline nnthings...

我尝试使用以下代码,但它不能正常工作,仍然没有包括所有字符:

string text = "thats anntestnwith multiline nnthings and so on";
var res = Regex.IsMatch(text, @"^([a-zA-Z0-9äöüÄÖÜß-|()[]/%'<>_?!=,*. ':;#+\])+$");
Console.WriteLine(res);

only包含以下字符时,我希望正则表达式返回true(不必包含所有字符,但至少包含以下字符中的一个,而不包含其他字符(:a-zA-Z0-9äüöÄÖÜß!#'-.:,; ^"§$%&/()=?}][{³²°*+~'_<>|

这是一个已知键盘字符的列表,我认为在消息中使用会很好。

如果指定了所有想要允许的字符,那么C#中的regex声明将看起来像

@"^[a-zA-Z0-9äüöÄÖÜß!#'-.:,; ^""§$%&/()=?\}][{³²°*+~'_<>|]+$"

但是,您提供的测试字符串包含换行符(LF、nx0A(字符,因此您需要在没有换行符的字符串上进行测试,或者将n添加到字符类:

@"^[a-zA-Z0-9äüöÄÖÜß!#'-.:,; ^""§$%&/()=?\}][{³²°*+~'_<>|n]+$"

请注意,"字符是加倍的,因为这是将双引号放入逐字字符串文字中的唯一方法。

此外,模式中的捕获括号会产生多余的开销,您应该删除它们。

最新更新