正则表达式的数字字符和.& -

Mar*_*lor 2 .net c# regex numerical numeric

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

"\D"
Run Code Online (Sandbox Code Playgroud)

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

所以我尝试了Chris'并做了一些调整以使其工作:

(我有一个名为"Original"的TextBox)

 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;
      }
  }
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*ich 5

您可以使用否定的字符类来排除数字.,和-.匹配像这样的单个字符的表达式是[^\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
Run Code Online (Sandbox Code Playgroud)

  • 实际上没有必要在那个位置逃避`-`:一个人也可以完全使用`[^ ​​\ d\.-]`. (2认同)
  • 也没有必要逃避这个点.请记住,括号内的字符类与正则表达式的其余部分具有(几乎)完全不同的语法.`[^\d .-]`实际上会起作用.也就是说,很难责怪人们逃离了HYPHEN-MINUS,因为它和插入符号对于他们是否需要逃脱以消除他们的(ab)普通魔法是敏感的. (2认同)