tft每日頭條

 > 科技

 > 按鍵精靈把字符串處理為數值

按鍵精靈把字符串處理為數值

科技 更新时间:2024-11-30 11:47:23

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

去除字符串中的标點符号不算個常用的功能,偶爾會用到,比如做采集腳本時,如果采集用戶名稱中有表情符号,則無法顯示會以問号代替。

通常我想到的解決辦法是“過濾”,一段文字中有效的字符就是中文、英文和數字,那麼我隻需要把這些類型的字符串提取出來行了。

關于在大量字符中提取指定字符,最常用的方式就是正則匹配,在按鍵中使用的是lua正則匹配,關于數字、字母在lua中都用明确的正則表達式,但是中文沒有,一般會用[\128-\254] 這個表達式:

Import "shanhai.lua" Dim str="你好囧犇hello 水電費world3aasdas50849638" Dim 漢字=shanhai.RegexFind(str,"[\128-\254] ") TracePrint 漢字(0)

這個意思是提取ascII碼 128-254,如果字符串中含有一些特殊符号,比如表情符号,就會當成中文處理,這樣就不準确了。

去掉特殊符号,最開始想到的辦法是字符串替換,就是用空值替換掉特殊符号,後來發現由于特殊符号在按鍵裡面都是以問号顯示,沒法替換。這就不得不想其他辦法。

按鍵精靈既然不行,那就試試lua,于是找了一個lua的處理代碼封裝成函數,來處理掉這些特殊符号。

代碼如下:

function QMPlugin.filter_spec_chars(s) local ss = {} local k = 1 while true do if k > #s then break end local c = string.byte(s, k) if not c then break end if c < 192 then if (c >= 48 and c <= 57) or (c >= 65 and c <= 90) or (c >= 97 and c <= 122) then table.insert(ss, string.char(c)) end k = k 1 elseif c < 224 then k = k 2 elseif c < 240 then if c >= 228 and c <= 233 then local c1 = string.byte(s, k 1) local c2 = string.byte(s, k 2) if c1 and c2 then local a1, a2, a3, a4 = 128, 191, 128, 191 if c == 228 then a1 = 184 elseif c == 233 then a2, a4 = 190, c1 ~= 190 and 191 or 165 end if c1 >= a1 and c1 <= a2 and c2 >= a3 and c2 <= a4 then table.insert(ss, string.char(c, c1, c2)) end end end k = k 3 elseif c < 248 then k = k 4 elseif c < 252 then k = k 5 elseif c < 254 then k = k 6 end end return table.concat(ss) end

使用方法是把代碼放入文本裡面,另存為lua後綴的文件,然後放到按鍵的插件目錄裡面。

按鍵精靈把字符串處理為數值(按鍵精靈插件源碼)1

traceprint xm.filter_spec_chars(str)

這個插件功能很多單一,就是去掉各種符号,保留中文、字母和數字。

=正文完=

,

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

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

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