使用 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# 的正则表达式匹配(简单??)正则表达式的主要内容,如果未能解决你的问题,请参考以下文章