正则表达式匹配字母数字和空格

Posted

技术标签:

【中文标题】正则表达式匹配字母数字和空格【英文标题】:Regex to match alphanumeric and spaces 【发布时间】:2010-09-15 22:22:03 【问题描述】:

我在这里做错了什么?

string q = "john s!";
string clean = Regex.Replace(q, @"([^a-zA-Z0-9]|^\s)", string.Empty);
// clean == "johns". I want "john s";

【问题讨论】:

好吧,呃,我很笨 ^ 开头是……我累了。还是不知道怎么匹配一个空格 【参考方案1】:

仅供参考

string clean = Regex.Replace(q, @"[^a-zA-Z0-9\s]", string.Empty);

实际上会更好

string clean = Regex.Replace(q, @"[^\w\s]", string.Empty);

【讨论】:

"\w" 与 "a-zA-Z0-9" 不同。 "\w" 包括超出该范围的字符【参考方案2】:

这个:

string clean = Regex.Replace(dirty, "[^a-zA-Z0-9\x20]", String.Empty);

\x20 是 'space' 字符的 ascii 十六进制

您可以添加更多您希望被允许的单个字符。 如果您希望例如 "?" 在返回字符串中可以添加 \x3f

【讨论】:

您也可以将 ASCII 字符匹配为八进制。在那种情况下,\040 代表一个空格字符。 ...或者,如果它们是空格或 ?:[^A-Za-z0-9 ?] 等简单的东西,您可以逐字输入它们。【参考方案3】:

我明白了:

string clean = Regex.Replace(q, @"[^a-zA-Z0-9\s]", string.Empty);

不知道你可以把 \s 放在括号里

【讨论】:

您的正则表达式只会匹配不包含字母数字、数字或空格的字符串。 [] 开头的 ^ 表示“这里没有任何东西” 这正是我想要的。在 Regex.Replace 中,我想匹配不是字母、数字或空格的任何内容。【参考方案4】:

我怀疑 ^ 在字符类之外不能像你想象的那样工作。

您告诉它要做的是将所有不是字母数字的内容替换为空字符串或任何前导空格。我认为您的意思是空格可以不替换 - 尝试将 \s 移动到 [] 类中。

【讨论】:

你是对的,那是开始(我知道,但已经晚了)【参考方案5】:

以下正则表达式用于在文本框中包含空格。

Regex r = new Regex("^[a-zA-Z\\s]+");
r.IsMatch(textbox1.text);

这对我来说很好。

【讨论】:

[A-z\\s] 会不会比[a-zA-Z\\s] 容易? @Alexander (虽然在这个时间点,对于任何后来的评论者来说,它更多) - 在“Z”和“a”之间有非字母字符,你的正则表达式会匹配,但 vivek 会匹配不是。【参考方案6】:

似乎有两个问题。

    您在与行首匹配的 [] 外使用了 ^ 您没有使用 * 或 +,这意味着您只会匹配单个字符。

我认为您想要以下正则表达式 @"([^a-zA-Z0-9\s])+"

【讨论】:

那不是用空字符串替换所有的字母数字和空格吗? 关于#2,量词并不重要,因为他想替换字符串中所有不匹配的字符,而不仅仅是一次运行,这需要全局替换 (... /g 在 Perl 中,不确定 C# 语法),带或不带 */+。 c# 正则表达式是@"^[a-zA-Z0-9\r]+$"【参考方案7】:

带有空格的底部正则表达式,支持来自不同文化的所有键盘字母

 string input = "78-selim güzel667.,?";
 Regex regex = new Regex(@"[^\w\x20]|[\d]");
 var result= regex.Replace(input,"");
 //selim güzel

【讨论】:

【参考方案8】:

方括号内的抑扬符表示除后续范围之外的所有字符。您需要方括号之外的抑扬符。

【讨论】:

是的,我想要它在里面。匹配任何不是这些字符范围的内容 哦,你说“我想要”我以为你的意思是你想要一个正则表达式来匹配它。你的意思是你希望 Replace 的结果是这样的。所以你希望正则表达式不匹配。我的脑袋疼。【参考方案9】:

此正则表达式将帮助您过滤是否存在至少一个字母数字字符和零个或多个特殊字符,即 _(下划线)、\s 空格、-(连字符)

string comparer = "string you want to compare";
Regex r = new Regex(@"^([a-zA-Z0-9]+[_\s-]*)+$");

if (!r.IsMatch(comparer))

   return false;
    
return true;

使用[a-zA-Z0-9]+ 为字母数字字符创建一个集合,集合末尾的“+”号(量词)将确保comparer 中至少有一个字母数字字符。

为特殊字符创建另一个集合[_\s-]*,“*”量词是为了验证comparer字符串中可以有特殊字符。

将这些集合打包成一个捕获组([a-zA-Z0-9]+[_\s-]*)+,表示comparer 字符串应该占据这些特征。

【讨论】:

【参考方案10】:
[RegularExpression(@"^[A-Z]+[a-zA-Z""'\s-]*$")]

以上语法也接受空格

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于正则表达式匹配字母数字和空格的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式:匹配字母数字和空格,但前导空格除外

正则表达式匹配字母数字和空格

用于匹配空格或标点符号和非字母数字的正则表达式

将字母和数字匹配在一起或仅匹配字母的正则表达式

初识正则表达式二

正则表达式的总结