我正在尝试在vb.net中编写正则表达式字符串匹配。我试图实现的条件是字符串应该只包含字母表,并且必须包含至少一个大小写的字母。即AAA-fail,aaa-fail,aAaA-pass。
我提出的正则表达式是^(([a-z]+[A-Z]+)+|([A-Z]+[a-z]+)+)$
有人可以建议一些更好/更简单的正则表达式吗?
答案 0 :(得分:4)
此RegEx适用于您:
^[a-zA-Z]*([A-Z][a-z]|[a-z][A-Z])[a-zA-Z]*$
说明:如果字符串必须至少有一个小写字母和一个大写字母,则大写字母和小写字母彼此相邻。这个地方是匹配的 ([AZ] [az] | [az] [AZ])它匹配两种情况:一个是大写字母第一个,第二个,然后如果满足这个条件你就可以添加任意数量的小写大写字母字符串任意一端的字符仍然匹配
答案 1 :(得分:4)
您创建的正则表达式在某些情况下会失败,例如“aAb”。我认为以下内容对您更有效:
^(?:[a-z]+[A-Z]+|[A-Z]+[a-z]+)(?:[a-zA-Z])*$
答案 2 :(得分: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