【问题标题】:Simple C# regex question简单的 C# 正则表达式问题
【发布时间】:2010-07-27 17:30:26
【问题描述】:

问题:如何测试给定的Regex 是否匹配整个字符串?

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

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

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

【问题讨论】:

    标签: c# regex


    【解决方案1】:

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

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

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


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

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

    【讨论】:

    • 这个答案是最复杂的一个,我认为这个问题已经完全回答了。
    【解决方案2】:

    使用锚定模式

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

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

    【讨论】:

    • +1 用于明显的“检查字符串长度”方法。除非您想根据更复杂的规则匹配某个字符,否则这是迄今为止最好的方法。
    • 略有不同的是. 不匹配"\n",除非您指定RegexOptions.Singleline。不太重要,真的:P
    • 显而易见的检查很好,但我怀疑这只是澄清问题的一个例子......实际上并不是他想要做的。
    • 马克拜尔斯是正当的。请阅读我现在添加的“编辑”段落。感谢您的回答。
    【解决方案3】:
    "b".Length == 1
    

    是比

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

    【讨论】:

      【解决方案4】:

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

      ^.$
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-13
        • 2011-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多