【问题标题】:Regex, two uppercase characters in a string [duplicate]正则表达式,字符串中的两个大写字符[重复]
【发布时间】:2017-04-25 20:02:16
【问题描述】:

我想使用正则表达式来确保字符串中有至少两个大写字符,在任何位置,无论是否在一起。

以下给了我两个:

([A-Z]){2}

环境 - 经典 ASP VB。

【问题讨论】:

  • 简单的答案:[A-Z].*[A-Z]Illustrated here
  • 这行得通,感谢您的帮助。虽然这是评论,但不是答案,所以我不能将其标记为解决方案。我应该将下面的标记为解决方案吗?再次感谢。

标签: regex


【解决方案1】:

你可以使用简单的正则表达式

[A-Z].*[A-Z]

匹配一个大写字母,后跟任意数量的任何东西(换行除外)和另一个大写字母。

如果你需要它来允许字母之间的换行,你必须设置 single line 标志。如果您使用的是 JavaScript(在询问与正则表达式相关的问题时,U 应始终包含风味/语言标签),则没有这种可能性。然后,Wiktor S 在对另一个答案的评论中建议的解决方案应该可以工作。

【讨论】:

    【解决方案2】:

    [A-Z].*[A-Z]

    A 到 Z 之间的任何符号,同样是 A 到 Z

    更新

    正如 Wiktor 在 cmets 中提到的:

    此正则表达式将检查一行中的 2 个字母(在大多数正则表达式中),而不是字符串。

    所以

    [A-Z][^A-Z]*[A-Z]

    应该做的事情(在大多数正则表达式风格/工具中)

    【讨论】:

    • 这个正则表达式将检查 line 上的 2 个字母(在大多数正则表达式风格中),而不是 string
    • .*([A-Z]).*([A-Z]).* 那么呢?
    • 不,[A-Z][^A-Z]*[A-Z]。并且只有在部分匹配是可能的情况下。甚至这个表达式也可能在某些风格/工具中失败。这个问题缺少一个重要的细节:正则表达式的使用位置。
    • 他说,他用的是ASP VB
    【解决方案3】:

    我相信您正在寻找的是这样的:

    .*([A-Z]).*([A-Z]).*
    

    细分为:

    .*        //Any number of characters (including zero)
    ([A-Z])   //A capital letter
    .*        //Any number of characters (including zero)
    ([A-Z])   //A second capital letter
    .*        //Any number of characters (including zero)
    

    【讨论】:

    • .* 两边是多余的
    • 不匹配大写字母和它们之间的字符(例如:regextester.com/?fam=97470)?如果 OP 希望它匹配整个字符串,我通常会包含它们,虽然我不熟悉 ASP VB,所以我可能会在这个用例中出错。
    猜你喜欢
    • 2018-01-15
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2016-02-14
    • 2017-11-05
    相关资源
    最近更新 更多