大家好,我是公衆号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後綴的文件,然後放到按鍵的插件目錄裡面。
traceprint xm.filter_spec_chars(str)
這個插件功能很多單一,就是去掉各種符号,保留中文、字母和數字。
=正文完=
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!