例如,我有以下字符串:
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-z
、A-Z
、0-9
、äüöÄÖÜß
和!#'-.:,; ^"§$%&/()=?}][{³²°*+~'_<>|
。
这是一个已知键盘字符的列表,我认为在消息中使用会很好。
如果指定了所有想要允许的字符,那么C#中的regex声明将看起来像
@"^[a-zA-Z0-9äüöÄÖÜß!#'-.:,; ^""§$%&/()=?\}][{³²°*+~'_<>|]+$"
但是,您提供的测试字符串包含换行符(LF、n
、x0A
(字符,因此您需要在没有换行符的字符串上进行测试,或者将n
添加到字符类:
@"^[a-zA-Z0-9äüöÄÖÜß!#'-.:,; ^""§$%&/()=?\}][{³²°*+~'_<>|n]+$"
请注意,"
字符是加倍的,因为这是将双引号放入逐字字符串文字中的唯一方法。
此外,模式中的捕获括号会产生多余的开销,您应该删除它们。