Board logo

標題: [分享] 正則表達式(bosco_yip 原創) [打印本頁]

作者: Hsieh    時間: 2010-5-7 14:28     標題: 正則表達式(bosco_yip 原創)

正則表達式
給參考 :

問題 : 求一字符串字母個數
A1= ascd2G34dH_漢字!ya,不區分大小寫。答案是9

1] 函數解法 :

=SUMPRODUCT(--(ABS(CODE(MID(UPPER(A1),ROW(INDIRECT("1:"&LEN(A1))),1))-77.5)<13))

2] 用"正則表達式" (Regular Expression), 寫的自訂函數 :

Function CountAlpha(Mystr)
Dim RegExp As Object
Set RegExp = CreateObject("vbscript.regexp")
RegExp.Global = True
RegExp.ignorecase = True
RegExp.Pattern = "[^a-zA-Z]"
CountAlpha = Len(RegExp.Replace(Mystr.Value, ""))
End Function
作者: toomellowhaw    時間: 2010-9-24 21:19

=SUMPRODUCT(LEN(A1)-LEN(SUBSTITUTE(UPPER(A1),CHAR(ROW(65:90)),)))
不知道有沒有漏算..
作者: Hsieh    時間: 2010-9-24 21:22

回復 2# toomellowhaw


    中文字及特殊符號呢?
作者: toomellowhaw    時間: 2010-9-24 21:25

問題的原意不是只要算英文字母數嗎?..還是我誤會了?
作者: Hsieh    時間: 2010-9-24 21:29

回復 4# toomellowhaw


    抱歉!是我一時看錯題意
作者: toomellowhaw    時間: 2010-9-24 21:35

呵,沒關係
在這兒逛逛,看看一些以前的文章,常能挖到寶..
看到一些題目,想試試自己能不能解,
練一練函數的用法,還需要大家多多指教,
如果有缺失或考慮不周全之處,務請指正,感恩..
作者: oobird    時間: 2010-9-25 00:43

我也是由bosco_yip 指導初識正則表達式的。
作者: asimov    時間: 2010-9-26 01:00

本帖最後由 asimov 於 2010-9-26 01:05 編輯

回復 2# toomellowhaw


toomellowhaw兄用取代的方式很有啟發性
收下學習了,謝謝


Hsieh 版主的函數解法似乎少了 "&"
=SUMPRODUCT(--(ABS(CODE(MID(UPPER(A1),ROW(INDIRECT("1:"&LEN(A1))),1))-77.5)<13))
作者: flying008    時間: 2010-9-28 17:23

感觉正则式其实在EXCEL应用起来的话功能是相当强大的, 只是其自定义函数的编写规则似乎难懂……
作者: ML089    時間: 2012-9-23 17:20

回復 2# toomellowhaw

如字串是   "aA123bB"
=SUMPRODUCT(LEN(A1)-LEN(SUBSTITUTE(UPPER(A1),CHAR(ROW(65:90)),))) 算出 2
(算出多少英文字母不分大小寫)

=SUMPRODUCT(--(ABS(CODE(MID(UPPER(A1),ROW(INDIRECT("1:"&LEN(A1))),1))-77.5)<13))  算出 4
(算出多少英文字母不分大小寫)
作者: ML089    時間: 2012-9-23 19:10

回復 1# Hsieh

求字串中有幾個字母,提供一式如下
=SUMPRODUCT((MID(UPPER(A1),ROW($1:$99),1)=CHAR(COLUMN(A:Z)+64))*1)

UPPER()函數將小寫字母改為大寫字母,可縮減大小字母判斷

此式適合作為數據陣列處理的範例公式
作者: stillfish00    時間: 2012-9-24 19:26

回復 1# Hsieh
原寫法是取代掉字串中非字母的字元
這裡稍微修改 , 提供另一種寫法
Function CountAlpha(Mystr)
    Dim RegExp As Object
    Set RegExp = CreateObject("vbscript.regexp")
    RegExp.Global = True
    RegExp.Pattern = "[a-zA-Z]"
    CountAlpha = RegExp.Execute(Mystr.Value).Count
End Function




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)