从字符串中删除非单词字符和前导数字

时间:2014-10-07 04:34:59

标签: c# regex

我有一个文本字段,可以通过代码输入标签。当用户在字段中键入文本时,它会自动解析文本,并从文本中删除非单词字符并将其放入标签中。

private void text_KeyUp(object sender, KeyEventArgs e)
{
    label.Content = Regex.Replace(text.Text, @"[^\w]", "").ToLower();
}

但是,我对此标签字段有另一个限制,我无法弄清楚如何做到这一点。我当前的RegEx使得标签只能包含小写字符。但是,我还需要确保标签中的第一个字符不是数字。我尝试了^[^A-Za-z][^\w],但这不起作用。有人有任何想法吗?

1 个答案:

答案 0 :(得分:1)

原始问题是“用......替换{英文字母}”而不是“用......替换{数字}”;在更新之后它仍然存在问题,因为它认为这两个操作是复合的 - 如果它后面没有单词字符,它将替换非A-Z

比较重写如下:

var filtered = text.Text;
filtered = Regex.Replace(filtered, @"\W+", "");   // trim non-word characters
filtered = Regex.Replace(filtered, @"^\d+", "");  // remove number(s) at start

label.Content = filtered.ToLower();

请注意,默认情况下,在C#/ .NET中escapes like \w\d(以及它们的对立面)是支持Unicode的。这使得它们与JavaScript / PCRE / Java / perl等不同,后者更加以英语为中心。