【问题标题】:Regular Expression issue matching string pattern "A-Za-z-A-Za-z_"正则表达式问题匹配字符串模式“A-Za-z-A-Za-z_”
【发布时间】:2012-04-19 09:40:54
【问题描述】:

我正在尝试编写一个正则表达式来匹配某种形式的字符串:

"[A-Za-z][A-Za-z]-[A-Za-z][A-Za-z]_[match all chars]"

我要匹配的字符串必须是这种形式,包括连字符和下划线。到目前为止我有:

Regex regEx = new Regex(@"[A-Za-z]+(-[A-Za-z]+)+*$", RegexOptions.IgnorePatternWhitespace);

我不确定如何添加下划线字符以便匹配。

此元素是我希望匹配的 XML 元素;我还想检索这个元素的内容。我怎么能这样做?

var newVar = from e in doc.Descendants("DocumentElement").Descendants() 
                         where regEx.IsMatch(e.Name.LocalName) 
                        select e;

【问题讨论】:

  • 请提供输入文本的示例,以及您要查找的匹配项。这太模糊了。如果有足够的信息,Regex 可以很好地找到匹配项。它是必须匹配正则表达式的单个表达式吗?它是一个完整的文本,您需要在其中找到匹配项吗?这些是非常不同的事情。 (我真的不明白没有这些信息,其他人怎么能给出答案)

标签: c# xml regex linq-to-xml pattern-matching


【解决方案1】:

我会用

@"^[A-Za-z]{2}-[A-Za-z]{2}_.*$"

解释:

  • ^ 行首
  • [A-Za-z]{2} 正好 2 个字符必须是 a-zA-Z
  • -破折号
  • _下划线
  • .* 任意字符
  • $ 行尾

编辑:

另见Regex docs

【讨论】:

    【解决方案2】:

    您的示例模式使用 + 修饰符,它是“超过 1”,而不是 2。它会比您想象的更多。

    Regex regEx = new Regex(@"^[A-Za-z]{2}-[A-Za-z]{2}_.*$", RegexOptions.IgnorePatternWhitespace);
    

    或者也可以设置不区分大小写的选项:

    Regex regEx = new Regex(@"^[a-z]{2}-[a-z]{2}_.*$", RegexOptions.IgnorePatternWhitespace | RegexOptions.IgnoreCase);
    

    【讨论】:

      【解决方案3】:

      我相信你想要的正则表达式是:

      new Regex(@"^[A-Z][A-Z]-[A-Z][A-Z]_", RegexOptions.CaseInsensitive);
      

      这应该捕获:
      ^[A-Z][A-Z] 开头的两个字母字符
      - 文字连字符
      [A-Z][A-Z] 两个字母字符
      _ 文字下划线字符

      您没有说要捕获此 xml 标记的全名,因此您不需要捕获.*$“任何其他字符直到字符串结尾”部分。

      【讨论】:

        【解决方案4】:

        查看这个正则表达式。

        在 nregex.com 上测试

        ^[A-Za-z]+(-[A-Za-z]+_[A-Za-z]{2})$
        

        这里的关键点:-

        • 字符串的最后一部分限定为 2 个字符(如果您不完全关心 2 个字符,请将其替换为 +)。

        这也执行捕获。

        【讨论】:

        • 你不需要转义连字符(除了在字符类中,但仅当它们不在类的开头或结尾时)。
        猜你喜欢
        • 1970-01-01
        • 2010-12-11
        • 1970-01-01
        • 1970-01-01
        • 2015-01-07
        • 2011-08-21
        • 2011-06-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多