正则表达式排除非单词字符但保留空格

Regex to exclude non-word Characters but leave spaces

我正在尝试编写一个 Regex 来阻止在 postcode 字段中输入无效字符的使用。

来自 this link 我像这样排除了所有 "Non-word" 个字符。

Regex regex = new Regex(@"[\W_]+");
string cleanText = regex.Replace(messyText, "").ToUpper();

但这也排除了 "Space" 个字符。

我相信这是可能的,但我发现正则表达式非常混乱!

有人可以帮忙解释一下所使用的正则表达式模式吗?

您可以反转字符 class 使其成为 否定字符 class,如下所示:

[^\sa-zA-Z0-9]+

这将匹配除空格或字母数字字符以外的任何字符。

RegEx Demo(因为这不是 .NET 正则表达式)

假设有效的邮政编码仅包含字母数字字符,您可以将除字母数字和空格之外的任何内容替换为空字符串:

Regex regex = new Regex(@"[^a-zA-Z0-9\s]");
string cleanText = regex.Replace(messyText, "").ToUpper();

请注意 \s 包括制表符、换行符和其他一些不可打印的字符。您可能不想将它们视为有效。遇到这种情况,直接把空格字符逐字列出即可:

[^a-zA-Z0-9 ]

您可以使用 character class subtraction:

[\W_-[\s]]+

它匹配一个或多个非单词和下划线符号,任何空白字符除外

要仅排除 水平 空白字符 在减法部分使用 [\p{Zs}\t]

[\W_-[\p{Zs}\t]]+

要仅排除 垂直 空白字符(换行字符) 在减法部分使用 [\n\v\f\r\u0085\u2028\u2029]

[\W_-[\n\v\f\r\u0085\u2028\u2029]]+

此正则表达式将捕获除字母、数字和空格之外的所有内容。

[^\w\s\d]|_

[ ] 中的 ^ 将导致正则表达式查找所有 除了 字母,数字, 和空格。