匹配至少包含一个大写字母和一个小写字母的字母字符串的正则表达式(vb.net)

5

我正在尝试在vb.net中编写正则表达式字符串匹配。 我要实现的条件是字符串应仅包含字母,并且必须至少包含一个大写和小写字母。即AAA-不通过,aaa-不通过,aAaA-通过。

我提出的正则表达式是^(([a-z]+[A-Z]+)+|([A-Z]+[a-z]+)+)$

有人能否为此建议一些更好/更简单的正则表达式?


如果我想将其稍微概括一些,比如说现在我想要一个字符串,它应该包含a-z A-Z,0-9和!@#$,并且必须包含所有四个字符,没有其他字符。我需要在正则表达式中键入所有排列组合吗? - Shailendra
3个回答

4
这个正则表达式可以帮助你:
^[a-zA-Z]*([A-Z][a-z]|[a-z][A-Z])[a-zA-Z]*$

说明:如果字符串必须至少有一个小写字母和一个大写字母,则存在一个点,其中大写字母和小写字母相邻。这个地方被([A-Z][a-z]|[a-z][A-Z])匹配,它同时匹配两种情况:大写字母在前和在后的情况,如果您满足这个标准,只需在字符串的任何一端添加任意数量的小写字母或大写字母字符,它仍然会匹配。


4

你创建的正则表达式在某些情况下会失败,比如"aAb"。我认为以下的正则表达式对你更好:

^(?:[a-z]+[A-Z]+|[A-Z]+[a-z]+)(?:[a-zA-Z])*$

不会因为 'aAb' 而失败。我建议你尝试运行它。 - RaYell
我的评论是关于Shail的原始正则表达式,而不是你的。你的解决方案是正确的。 - Templar
哦,那我很抱歉。我注意到它是在我的几分钟后添加的,所以我以为你指的是它。 - RaYell
是的,你说得对。我之前没有注意到。它无法处理'aAb'。嘿,还有一件事我在想,如果我想要更加通用一点,比如说现在我想要一个字符串,它应该包含a-z、A-Z和0-9,并且必须同时包含这三个字符,没有其他字符。我需要在正则表达式中输入所有排列组合吗? - Shailendra
(?: 表示非捕获组。默认情况下,括号会将内容捕获到反向引用中,您可以使用它来检索字符串的不同部分。由于您没有这样做,我使用了非捕获组约定。但是,为了确定字符串是否与正则表达式匹配,实际上并没有什么区别。 - Templar
显示剩余3条评论

1
只是为了好玩,我尝试解决您的问题,而不使用正则表达式。
我有以下方法,检查字符串值是否包含对应于指定Unicode类别的字符(大写字母,小写字母,数字...)。
Private Function IsValid(ByVal value As String, _
                         ByVal ParamArray categories As UnicodeCategory()) _
                         As Boolean

    'Create a hashset with valid unicode categories
    Dim validSet = New HashSet(Of UnicodeCategory)(categories)

    'Group the string value's characters by unicode category
    Dim groupedCharacters = value.GroupBy(Function(c) Char.GetUnicodeCategory(c))

    'Get an enumerable of categories contained in the string value
    Dim actualCategories = groupedCharacters.Select(Function(group) group.Key)

    'Return true if the actual categories correspond 
    'to the array of valid categories
    Return validSet.SetEquals(actualCategories)
End Function

这个方法可以这样使用:

Dim myString As String = "aAbbC"
Dim validString As Boolean = IsValid(myString, _
                                     UnicodeCategory.LowercaseLetter, _
                                     UnicodeCategory.UppercaseLetter)

使用这种方法,您可以允许大写、小写和数字字符而无需做任何更改。只需向IsValid添加第三个参数:UnicodeCategory.DecimalDigitNumber即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接