1

例如我有以下字符串:

thats a\n\ntest\nwith multiline \n\nthings...

我尝试使用以下代码,该代码无法正常工作,但仍未包含所有字符:

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

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

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

4

1 回答 1

2

如果您指定了所有要允许的字符,C# 中的正则表达式声明将如下所示

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

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

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

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

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

于 2022-02-02T20:34:34.453 回答