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