使用 C# 的正则表达式匹配(简单??)正则表达式

Posted

技术标签:

【中文标题】使用 C# 的正则表达式匹配(简单??)正则表达式【英文标题】:Matching an (easy??) regular expression using C#'s regex 【发布时间】:2010-09-16 12:08:46 【问题描述】:

好的,抱歉,这似乎是一个愚蠢的问题,但我无法弄清楚:

我正在尝试解析一个字符串,只是想检查它是否只包含以下字符:'0123456789dD+'

我尝试了很多东西,但无法找出正确的正则表达式来使用!


  Regex oReg = new Regex(@"[\d dD+]+");
  oReg.IsMatch("e4");

即使 e 不被允许也会返回 true... 我试过很多字符串,包括 Regex("[1234567890 dD+]+")...

它始终适用于 Regex Pal,但不适用于 C#...

请指教,我再次道歉,这似乎是一个非常愚蠢的问题

【问题讨论】:

【参考方案1】:

试试这个:

@"^[0-9dD+ ]+$"

开头和结尾的^$ 分别表示输入字符串的开头和结尾。因此,在开头和结尾之间,只允许指定的字符。在您的示例中,如果字符串包含其中一个字符,即使它还包含其他字符,正则表达式也会匹配。

@cmets:谢谢,我修复了缺失的+ 和空格。

【讨论】:

我认为您的示例在 $ 之前需要另一个 + 或 *,它目前只匹配单个字符【参考方案2】:

哎呀,你忘了界限,试试吧:

Regex oReg = new Regex(@"^[0-9dD +]+$");
oReg.IsMatch("e4");

^ 匹配文本流的开头,$ 匹配结尾。

【讨论】:

原始模式允许空间【参考方案3】:

它与 4 匹配;如果您想要对整个字符串进行完全匹配,则需要 ^ 和 $ 来终止正则表达式 - 即

    Regex re = new Regex(@"^[\d dD+]+$");
    Console.WriteLine(re.IsMatch("e4"));
    Console.WriteLine(re.IsMatch("4"));

【讨论】:

【参考方案4】:

这是因为正则表达式也可以匹配输入的一部分,在这种情况下它只匹配“e4”的“4”。如果你想匹配整行,你必须用“^”(匹配行开始)和“$”(匹配行结束)包围正则表达式。

所以要让你的例子工作,你必须写如下:

Regex oReg = new Regex(@"^[\d dD+]+$");
oReg.IsMatch("e4");

【讨论】:

【参考方案5】:

我相信它会返回 True,因为它找到了 4。正则表达式中的任何内容都不会从结果中排除字母 e。

【讨论】:

【参考方案6】:

另一种选择是反转所有内容,以便匹配您不想允许的字符:

Regex oReg = new Regex(@"[^0-9dD+]");
!oReg.IsMatch("e4");

【讨论】:

以上是关于使用 C# 的正则表达式匹配(简单??)正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

c#使用正则表达式匹配数据 并计算填入新的值

C#匹配中文字符串的4种正则表达式分享

c# 正则表达式 匹配

C# 正则表达式匹配数组

C# 正则表达式匹配总是返回 false

C# 正则表达式匹配具有分隔符的字符串