tft每日頭條

 > 科技

 > 按鍵精靈文本轉數字

按鍵精靈文本轉數字

科技 更新时间:2024-12-25 00:19:38

大家好,我是公衆号3分鐘學堂的郭立員~

這是一篇關于正則匹配的教程,但是隻針對手機号、郵箱這類的提取,并且會把它們封裝成函數,可以方便使用。

先來舉個例子,我寫一句話:"我的手機号:13712345678",然後想要裡面的手機号碼,該怎麼弄呢?看看下面的代碼:

Import "shanhai.lua" Dim str="我的手機号:13712345678" Dim arr=shanhai.RegexFind(str,"%d ") TracePrint arr(0)

按鍵精靈文本轉數字(直接提取多位數字)1

這是一個正則匹配數字的例子,正則表達式是%d ,這個表達式由2個部分組成%d和

%d:代表數字(1個)

:粗淺的理解是個“數量詞”,代表多個

%d 是兩者結合在一起,意思是匹配多個數字在一起的組合,需要注意 是在%d後面哦,和我們說話的語法順序是不太一樣的。

接着講例子,如果把那句話變得複雜點又會怎樣?

"我有1張手機卡,号碼是13712345678"

内容稍微改變了一下,看看剛剛的代碼是否還能提取。

按鍵精靈文本轉數字(直接提取多位數字)2

好神奇,提取的數字不再是手機号碼,而是數字1,号碼去哪了,改一下代碼:

按鍵精靈文本轉數字(直接提取多位數字)3

原來手機号碼在數組下标為1的裡面,這說明正則匹配結果是把所有符合表達式的結果都匹配出來,然後存入到數組中,如果匹配的表達式足夠精準,隻有一個符合要求的結果,那麼結果的數組下标就是0。

還拿手機号碼為例,怎麼才能匹配的足夠精準,手機号碼的特點是連續的11位數字,那麼就寫11個%d

Import "shanhai.lua" Dim str="我有1張手機卡,号碼是13712345678" Dim arr=shanhai.RegexFind(str,"%d%d%d%d%d%d%d%d%d%d%d") TracePrint arr(0)

按鍵精靈文本轉數字(直接提取多位數字)4

這樣一來,匹配結果隻有手機号了,可能有人會說連着寫11個%d太麻煩了,有沒有簡寫的方法,我的回答是沒有。

我查過lua的正則匹配規則,按鍵正則是基于lua的,不支持類似%d{11}的寫法,如果想精準匹配,就是寫多個%d。

對于手機号還好說,如果是QQ号呢,它的位數不是固定的,最低有5位的,最高有10位的,那怎麼匹配?

還是看個例子:"我有2個QQ号,分别是453485278和4832326"這麼一句話,提取裡面的QQ号碼。

先用%d 把所有的數字都匹配出來:

Import "shanhai.lua" Dim str="我有2個QQ号,分别是453485278和4832326" Dim arr=shanhai.RegexFind(str,"%d ") For i = 0 To UBOUND(arr) TracePrint arr(i) Next

按鍵精靈文本轉數字(直接提取多位數字)5

對于我們來說裡面是有不想要的結果,所以要加條件判斷,還記得剛剛我說的QQ号的位數範圍是5-10位,那麼我們把結果在這個範圍之外的都去掉。

Import "shanhai.lua" Dim str="我有2個QQ号,分别是453485278和4832326" Dim arr=shanhai.RegexFind(str,"%d ") For i = 0 To UBOUND(arr) If 5 <= Len(arr(i)) <= 10 Then TracePrint arr(i) End If Next

按鍵精靈文本轉數字(直接提取多位數字)6

為了方便後期使用,我還是把處理後的結果寫入到一個數組中。

Import "shanhai.lua" Dim str="我有2個QQ号,分别是453485278和4832326" Dim arr=shanhai.RegexFind(str,"%d ") Dim arrnew(),n=0 For i = 0 To UBOUND(arr) If 5 <= Len(arr(i)) <= 10 Then TracePrint arr(i) arrnew(n) = arr(i) n=n 1 End If Next TracePrint join(arrnew,",")

按鍵精靈文本轉數字(直接提取多位數字)7

進一步優化,就是封裝成函數了:

Import "shanhai.lua" Dim str="我有2個QQ号,分别是453485278和4832326" Dim arr=getQQ(str,5,10) TracePrint join(arr,",") Function getQQ(str,min,max) Dim arr=shanhai.RegexFind(str,"%d ") Dim arrnew(),n=0 For i = 0 To UBOUND(arr) If min <= Len(arr(i)) <= max Then arrnew(n) = arr(i) n=n 1 End If Next getQQ=arrnew End Function

按鍵精靈文本轉數字(直接提取多位數字)8

除了數字、還有其他的也可以,比如字母,如匹配郵箱等,詳細正則可以查看這篇文章:

《提取你想要的内容(正則匹配的簡單介紹)》

好了内容就這些,覺得還行幫忙給文章點個贊。

=正文完=

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved