【问题标题】:Regex for numeric characters and .&-数字字符和 .&- 的正则表达式
【发布时间】:2011-08-10 16:01:46
【问题描述】:

我正在使用 C# 和 .NET,并且我有一个看起来像这样的正则表达式

"\D"

这匹配所有非数字字符,但我不希望它匹配小数点 (.) 和负号 (-)。如何使用正则表达式做到这一点?

所以我尝试了 Chris' 并对其进行了一些调整以使其正常工作:

(我有一个名为“Original”的文本框)

 private void Original_TextChanged(object sender, EventArgs e) {
      Regex regex = new Regex(@"[^\d.-]", RegexOptions.IgnoreCase);
      Match match = regex.Match(Original.Text);
      if (match.Success) {
          Original.Text = regex.Replace(Original.Text, "");
          Original.SelectionStart = Original.TextLength;
      }
  }

这个Original.SelectionStart = Original.TextLength; 是因为每当它被替换时,它会将选择放在开头,这对用户来说似乎有点奇怪......

【问题讨论】:

    标签: c# .net regex numeric numerical


    【解决方案1】:

    您可以使用negated character class 来排除数字、.-。像这样匹配单个字符的表达式是[^\d\.\-]。插入符号表示该类被否定。

    Regex.IsMatch("a f", @"^[^\d\.\-]+$"); // true
    Regex.IsMatch("a_f", @"^[^\d\.\-]+$"); // true
    Regex.IsMatch("a.f", @"^[^\d\.\-]+$"); // false
    Regex.IsMatch("af-", @"^[^\d\.\-]+$"); // false
    Regex.IsMatch("-42", @"^[^\d\.\-]+$"); // false
    Regex.IsMatch("4.2", @"^[^\d\.\-]+$"); // false
    

    【讨论】:

    • - 在那个位置其实没必要转义:[^\d\.-] 也可以完美使用。
    • @mousio:是的!好点子,尽管我总是对这样做保持警惕:) 我猜是愚蠢的迷信。
    • 也不需要转义点。请记住,括号中的字符类与正则表达式的其余部分具有(几乎)完全不同的语法。 [^\d.-] 实际上会起作用。也就是说,很难责怪人们逃避连字符减号,因为它和插入符号对于他们是否需要逃避以消除他们的(异常)正常魔法是位置敏感的。
    • ., anywhere 在(否定的)字符类中也是如此,但我同意你在想要表达文字时无论如何都要转义:]
    猜你喜欢
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多