用正则表达式计算小写

问题描述:

我想用正则表达式计算字符串中小写字符的数量。我想我错过了一些非常明显的东西,但无法弄清楚什么!这是一个古老的经典ASP页面。用正则表达式计算小写

<% 
Password="abcd123" 
Set myRegExp = New RegExp 
myRegExp.Pattern = "(.*[a-z].*)" 
Response.Write myRegExp.Execute(Password).Count 
%> 

该脚本返回1,而不是4

你捕获组是错误的,这就够了:([a-z])。使用.*可以捕获围绕小写字符的所有内容。

+0

谢谢你,我已经去掉了*从模式 –

为什么不只是使用[a-z]来代替,因为当您使用(.*[a-z].*)时,它会像所有输入一样匹配而不是逐个字符地匹配吗?

您可以查看这里的区别:
[a-z] regex
(.*[a-z].*) Your regex

我也建议阅读:

+0

感谢这一点 - 我会看到你推荐:) –

我认为下面是你想要什么做。

Password="abcd123" 
Set myRegExp = New RegExp 
myRegExp.Global = True ' This is required to get all matches 
myRegExp.Pattern = "[a-z]" 
Response.Write myRegExp.Execute(Password).Count 

但我对你有一些建议。

  • 你可以让你的规则贪心+。这会减少周期。

  • 您需要将.Global设置为True以获得所有匹配,而不仅仅是第一个。

  • 使用此方法,您需要遍历匹配集合(从myRegExp.Execute返回)以找到正确的结果。

Password="abcd123fooBar" 
Set myRegExp = New RegExp 
myRegExp.Pattern = "[a-z]+" 
myRegExp.Global = True 
count = 0 
For Each match In myRegExp.Execute(Password) 
    count = count + match.Length 
Next 
Response.Write count 'prints 9 

而这里的另一种方式是相同的。

这与所有非小写字符匹配,并从结果字符串中删除它们。然后您可以使用Len函数获得长度。

Password="abcd123fooBar" 
Set myRegExp = New RegExp 
myRegExp.Pattern = "[^a-z]+" 
myRegExp.Global = True 
count = Len(myRegExp.Replace(Password, "")) 
Response.Write count 'prints 9 
+0

感谢这个文章 - 全球设置为true是拼图的最后一块。 –

+0

事实上,我并不需要循环,我只能使用: –

+0

myRegExp.Execute(Password).Count –