问题:如果给定的Regex
匹配整个字符串,测试的最简单方法是什么?
示例:
例如。给定Regex re = new Regex(".");
我想测试给定的输入字符串是否只有一个字符使用此正则表达式re
。我该怎么做?
换句话说:我正在寻找类Regex
的方法,类似于Java中类matches()
中的方法Matcher
(“尝试到将整个区域与模式匹配。“)。
编辑: 此问题与获取某些string
的长度无关。问题是如何将整个字符串与常规表达匹配。此处使用的示例仅用于演示目的(通常每个人都会检查Length
属性以识别一个字符串)。
答案 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)
添加“字符串开头”和“字符串结束”锚点
^.$