Aller au contenu principal

Découper une chaîne selon un séparateur (string.split)

Déclaration

tableauTexteDécoupé = string.split(texteÀDécouper, séparateur)

Paramètres

  • texteÀDécouper
    De type texte, chaîne à découper
  • séparateur
    De type texte, séparateur

Valeur de retour

  • tableauTexteDécoupé
    De type table, fragments de chaîne découpés et classés dans l’ordre dans cette table

Description

Découpe une chaîne selon la règle du séparateur. Mots-clés : découpage de chaîne, découpage de texte, séparation de texte, segmentation de texte

Exemple

-- Exemple 1 (séparer un compte et un mot de passe) :
t = string.split('lfue6841214----123456', '----')
sys.alert('账号是:'..t[1])
--
-- Exemple 2 (extraire la partie entre deux #) :
t = string.split('您好,验证码是#4937#,15分钟内有效。【爆炸科技】', '#')
sys.alert('验证码是:'..t[2])
--
-- Exemple 3 (extraire une partie avec une règle plus complexe) :
t = string.split('您好,验证码是4937,15分钟内有效。【爆炸科技】', '验证码是')
t = string.split(t[2], ',15分钟')
sys.alert('验证码是:'..t[1])

Remarque : le code ci-dessus utilise la fonction sys.alert, qui n’est pas présentée dans ce chapitre.

Exemple d’encapsulation 1

-- Encapsulation pour extraire une partie centrale du texte (renvoie nil si aucune correspondance)
function str_middle(str, sep1, sep2)
assert(type(str) == 'string', '`str_middle` 第 #1 参数必须是字符串')
assert(type(sep1) == 'string', '`str_middle` 第 #2 参数必须是字符串')
assert(type(sep2) == 'nil' or type(sep2) == 'string', '`str_middle` 第 #3 参数可选,但必须是字符串')
local t = string.split(str, sep1)
if not sep2 or sep1==sep2 then
return t[2]
else
if t[2] == nil then
return nil
else
t = string.split(t[2], sep2)
if t[2] == nil then
return nil
else
return t[1]
end
end
end
end
-- L’encapsulation ci-dessus peut être copiée dans un script.
--
r = str_middle('您好,验证码是4937,15分钟内有效。【爆炸科技】', '码是', ',15分')
sys.alert('验证码是:'..r)
-- Sortie : "验证码是:4937"
--
r = str_middle('您好,验证码是#8346#,15分钟内有效。【爆炸科技】', '#')
sys.alert('验证码是:'..r)
-- Sortie : "验证码是:8346"

Remarque : le code ci-dessus utilise la fonction sys.alert, qui n’est pas présentée dans ce chapitre.

Exemple d’encapsulation 2

-- Extraire le nom de fichier d’un chemin absolu
function str_strip_dirname(path)
local d = string.split(path, '/')
return d[#d]
end

-- Extraire le répertoire d’un chemin absolu
function str_strip_filename(path)
local d = string.split(path, '/')
d[#d] = nil
return table.concat(d, '/')
end

-- Supprimer l’extension (suffixe) de la dernière partie du chemin
function str_strip_extension(path)
local d = string.split(path, '/')
local fnt = string.split(d[#d], '.')
d[#d] = fnt[1]
return table.concat(d, '/')
end

-- Obtenir l’extension (suffixe) de la dernière partie du chemin
function str_get_extension(path)
local d = string.split(path, '/')
local fnt = string.split(d[#d], '.')
table.remove(fnt, 1)
return table.concat(fnt, '.')
end

sys.alert(str_strip_dirname("/private/var/mobile/Media/1ferver/lua/scripts/1.lua.xxt"))
-- Sortie : "1.lua.xxt"

sys.alert(str_strip_filename("/private/var/mobile/Media/1ferver/lua/scripts/1.lua.xxt"))
-- Sortie : "/private/var/mobile/Media/1ferver/lua/scripts"

sys.alert(str_strip_extension("/private/var/mobile/Media/1ferver/lua/scripts/1.lua.xxt"))
-- Sortie : "/private/var/mobile/Media/1ferver/lua/scripts/1"

sys.alert(str_get_extension("/private/var/mobile/Media/1ferver/lua/scripts/1.lua.xxt"))
-- Sortie : "lua.xxt"

sys.alert(str_strip_extension(str_strip_dirname("/private/var/mobile/Media/1ferver/lua/scripts/1.lua.xxt")))
-- Sortie : "1"

Remarque : le code ci-dessus utilise les fonctions sys.alert et table.concat, qui ne sont pas présentées dans ce chapitre.

Exemple potentiellement connexe (transformer un texte mixte chinois-anglais en caractères individuels, UTF-8 uniquement)

-- Cet exemple n’utilise pas string.split.
function text_explode(text)
local ret = {}
for p, c in utf8.codes(text) do
ret[#ret + 1] = utf8.char(c)
end
return ret
end
--
local t = text_explode('你好,XXTouch')
sys.alert(table.concat(t, '/')) -- Sortie : "你/好/,/X/X/T/o/u/c/h"

Remarque : le code ci-dessus utilise les fonctions sys.alert, table.concat, utf8.char et utf8.codes, qui ne sont pas présentées dans ce chapitre.

Autres exemples

Voir l’exemple récapitulatif à la fin de ce chapitre