我正在尝试在vb.net中编写正则表达式字符串匹配。 我要实现的条件是字符串应仅包含字母,并且必须至少包含一个大写和小写字母。即AAA-不通过,aaa-不通过,aAaA-通过。
我提出的正则表达式是^(([a-z]+[A-Z]+)+|([A-Z]+[a-z]+)+)$
有人能否为此建议一些更好/更简单的正则表达式?
我正在尝试在vb.net中编写正则表达式字符串匹配。 我要实现的条件是字符串应仅包含字母,并且必须至少包含一个大写和小写字母。即AAA-不通过,aaa-不通过,aAaA-通过。
我提出的正则表达式是^(([a-z]+[A-Z]+)+|([A-Z]+[a-z]+)+)$
有人能否为此建议一些更好/更简单的正则表达式?
^[a-zA-Z]*([A-Z][a-z]|[a-z][A-Z])[a-zA-Z]*$
说明:如果字符串必须至少有一个小写字母和一个大写字母,则存在一个点,其中大写字母和小写字母相邻。这个地方被([A-Z][a-z]|[a-z][A-Z])匹配,它同时匹配两种情况:大写字母在前和在后的情况,如果您满足这个标准,只需在字符串的任何一端添加任意数量的小写字母或大写字母字符,它仍然会匹配。
你创建的正则表达式在某些情况下会失败,比如"aAb"。我认为以下的正则表达式对你更好:
^(?:[a-z]+[A-Z]+|[A-Z]+[a-z]+)(?:[a-zA-Z])*$
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)