【问题标题】:Regex - Match a string only when it contains any alphabetic characters正则表达式 - 仅当字符串包含任何字母字符时才匹配字符串
【发布时间】:2009-03-02 07:48:06
【问题描述】:

示例字符串

785*()&!~`a

##$%$~2343

455frt&*&*

我想捕获第一个和第三个但不是第二个,因为它不包含任何字母字符请帮助

【问题讨论】:

    标签: c# .net regex match alpha


    【解决方案1】:

    事实上,我认为[a-zA-Z] 可能足以匹配您的字符串。

    要捕获整个内容,请尝试:^.*[a-zA-Z].*$

    【讨论】:

    • 我同意(不需要我的前瞻)。当心“dotall”模式:你不想要 '.'包括 \r\n
    【解决方案2】:

    这是一种可能的方法:

    .*[a-zA-Z]+
    

    【讨论】:

    • @Guido,它没有完全捕获 455frt&*&*。
    • @Shabby,如果将 .* 添加到正则表达式,则会捕获第一个和第三个实例。然后正则表达式将变为 ".*[a-zA-Z]+.*"
    【解决方案3】:

    您或许应该澄清一下您所说的“捕获”是什么意思:您想要整个字符串仅包含 ascii 位吗?

    此外,您没有说它是否应该只匹配纯罗马字母(A 到 Z),或者它是否应该匹配 Unicode 字符以匹配其他语言的字符串。

    如果你只需要测试你的字符串,在 C# 中你会这样做:

    bool matching = Regex.IsMatch(myString, "[a-zA-Z]");
    

    您不需要任何其他内容,因为myString 字符串中的任意一个字母都会匹配(根据您的定义)。

    【讨论】:

      【解决方案4】:

      这是我最喜欢的 RegEx 测试网站:Javascript Regexp Tester and Cheat Sheet

      【讨论】:

        【解决方案5】:

        如果要匹配所有字母(包括非 ascii 字母),请使用 p{L} 而不是 [a-zA-Z]。见Unicode categories

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-04-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-02
          • 1970-01-01
          相关资源
          最近更新 更多