??歷史文章分類合集?? ??最近五篇原創(chuàng)文章??
![]() 需求 在日常工作中,我們可能需要在Excel中查找某個特定字符,在字符串中出現(xiàn)的所有位置。例如: 比如: 會計科目“應交稅金-應交增值稅-銷項稅-13%”, 分隔符“-”的所有位置5、11、15 ![]() Excel本身沒有直接返回所有位置的函數(shù),但我們可以通過組合使用一些函數(shù)來實現(xiàn)這一功能。 ![]() 數(shù)據(jù)
![]() 公式一 思路: 1、用FIND函數(shù)逐步在文本中第1個、第2個……開始查找“-”。會返回{5;5;5;5;5;10;10;10;10;10;13;13;13;#VALUE!;#VALUE!……} 2、然后用torow函數(shù)過濾掉錯誤值#VALUE! 3、最后用UNIQUE函數(shù)提取唯一值 完整公式:
解釋: LEN(A2)計算字符串長度 SEQUENCE(LEN(A2))按字符串長度生成序列1、2、3…… ![]() 公式二 思路: 1、用Substitute函數(shù)SUBSTITUTE(A2,"-","■",ROW($1:$99))替換文本中第1個、第2個、第3個“-” 2、然后用Find函數(shù)去查找"■"。 3、最后用Torow過濾掉錯誤值#VALUE! 完整公式:
![]() 公式三 思路: 1、用正則表達式函數(shù)提取以“-”為結尾的每一節(jié)子字符串REGEXP(A2,".*?-"),并計算字符串長度Len() 2、然后用Reduce累加計算字符串長度 WPS完整公式: =SCAN(,LEN(REGEXP(A2,".*?-")),SUM) Excel中公式改為: =SCAN(,LEN(REGEXEXTRACT(B3,".*?-",1)),SUM) 正則表達式解釋: ".*?-" . .*? 部分 . (點號):匹配任意單個字符(除換行符外) *:表示匹配前一個元素零次或多次(這里是匹配任意字符多次) ?:在這里作為懶惰匹配(也叫非貪婪模式),表示匹配盡可能少的字符 所以 .*? 組合表示:匹配任意數(shù)量的字符,但盡可能少地匹配(直到遇到下一個匹配條件) 從本文的案例可以看出,用正則表達式,公式要簡短太多。 現(xiàn)在不管是WPS還是Excel都增加了正則表達式函數(shù),它不再是程序猿的專利,表哥表妹學好了,可大大提高文本處理的效率。 歡迎點擊訂閱龍逸凡的正則表達式文章合集【免費的!】,跟龍逸凡一起學習正則表達式。 如需加入RPA群,請備注RPA 如需加入圖表群,請備注圖表 |
|