简单的C#正则表达式问题

时间:2010-07-27 08:53:06

标签: c# regex

问题:如果给定的Regex匹配整个字符串,测试的最简单方法是什么?

示例: 例如。给定Regex re = new Regex(".");我想测试给定的输入字符串是否只有一个字符使用此正则表达式re。我该怎么做?

换句话说:我正在寻找类Regex的方法,类似于Java中类matches()中的方法Matcher(“尝试到将整个区域与模式匹配。“)。

编辑: 此问题与获取某些string的长度无关。问题是如何将整个字符串与常规表达匹配。此处使用的示例仅用于演示目的(通常每个人都会检查Length属性以识别一个字符串)。

4 个答案:

答案 0 :(得分:5)

如果允许您更改正则表达式,则应将其^( ... )$括起来。您可以在运行时执行此操作,如下所示:

string newRe = new Regex("^(" + re.ToString() + ")$");

这里的括号是必要的,以防止创建像^a|ab$这样的正常表达式,做你想要的。此正则表达式匹配以a开头的任何字符串或以ab结尾的任何字符串。


如果您不想更改正则表达式,可以查看Match.Value.Length == input.Length。这是ASP.NET正则表达式验证器中使用的方法。请参阅我的回答here以获得更全面的解释。

请注意,此方法可能会导致一些您应该注意的奇怪问题。正则表达式“a | ab”将匹配字符串'ab',但匹配的值将仅为“a”。因此即使这个正则表达式可以匹配整个字符串,它也没有。文档中有关于此的警告。

答案 1 :(得分:4)

使用锚定模式

Regex re = new Regex("^.$");

测试字符串长度我会检查.Length属性(str.Length == 1)...

答案 2 :(得分:4)

"b".Length == 1

是比

更好的候选人
Regex.IsMatch("b", "^.$")

答案 3 :(得分:3)

添加“字符串开头”和“字符串结束”锚点

^.$