разделение единой строки по заданным позициям или шаблонам
chunks = strsplit(string) chunks = strsplit(string, indices) [chunks, matched_separators] = strsplit(string, separators) [chunks, matched_separators] = strsplit(string, separators, limit) [chunks, matched_separators] = strsplit(string, regexp) [chunks, matched_separators] = strsplit(string, regexp, limit)
[1, length(string)-1].
string и используемых
в качестве ножниц. Поддерживаются расширенные символы UTF8.
regexp может не использоваться после завершающего
разделителя "/". Регулярное выражение может включать в себя расширенные
символы UTF8. Символы "/" и "\", используемые в теле regexp
должны быть защищены как "\/" и "\\".
Например: "/k.{2}o/".
length(indices)+1 элементов,
соответствующим разделённым кусочкам.
size(chunks,1)-1 :
совпавшие разделители или шаблоны выражений.
string. Если она включает в себя больше
случаев обнаружений разделителей, то её неразделённый остаток возвращается в
последнем кусочке в chunks($).
strsplit(string) разделяет string
на все её отдельные символы.
strsplit(string, indices) разделяет
string по указанным позициям символам в векторе
indices. Символы в этих индексах являются началом
возвращаемых кусочков chunks.
strsplit(string, separators) разделяет
string по позициям после любого
совпавшего разделителя среди строк separators.
Найденные и использованные разделители удаляются из остатков кусочков.
strsplit(string, "") эквивалентно
strsplit(string).
strsplit(string, regexp) делает то же самое,
за исключением того, что string проверяется по указанному
регулярному выражению, используемому как "унифицированный разделитель", вместо
любого "постоянного" разделителя среди ограниченного набора
separators.
Если string начинается с совпавшего разделителя или выражения, то
chunks(1) является набором из "".
Если string оканчивается совпавшим разделителем или
выражением, то "" добавляется в конец последнего элемента
chunks.
Если не найдено ни одного совпавшего разделителя или регулярного выражения в
string, то она возвращается как есть в chunks.
Это будет заметно в случае для string="".
Без опции limit любая строка string,
включающая n разделителей, будет разделена на
n+1 кусочков.
strsplit(string, separators, limit) или
strsplit(string, regexp, limit) будет
искать совпадающий разделитель или выражение для максимального количества
limit. Если затем останутся совпадения в необработанном
остатке string, то этот остаток будет возвращён как есть в
chunks($).
[chunks, matched_separators] = strsplit(string,…)
возвращает столбец совпавших разделителей или выражений, в дополнению к
chunks.
Тогда strcat([chunks' ; [matched_separators' ""]]) должен
быть равным string.
![]() | Сравнение strsplit() и tokens():
|
Разделение по указанным индексам:
--> strsplit("Scilab")'
ans =
"S" "c" "i" "l" "a" "b"
--> strsplit("αβδεϵζηθικλμνξοπρστυφϕχψω", [1 6 11])
ans =
"α"
"βδεϵζ"
"ηθικλ"
"μνξοπρστυφϕχψω"
Разделение по совпавшим разделителям:
strsplit("aabcabbcbaaacacaabbcbccaaabcbc", "aa") // разделение начинается с разделителя => "" в начале кусочка // Последовательные разделители не сжимаются: strsplit("abbcccdde", "c")' // С несколькими возможными разделителями: t = "aabcabbcbaaacacaabbcbccaaabcbc"; [c, s] = strsplit(t, ["aa" "bb"]); c', s' strcat([c';[s' ""]]) == t // Ограничим число разделений до 4, => 4 кусочка + необработанный остаток: strsplit("aabcabbcbaaacacaabbcbccaaabcbc", ["aa" "bb"], 4) // Разделение строки, заканчивающейся разделителем даёт конечный "": strsplit("aabcabbcbaaacacaabbcbccaaabcbc", "cbc")' | ![]() | ![]() |
--> strsplit("aabcabbcbaaacacaabbcbccaaabcbc", "aa") // t starts with the separator => heading "" chunk
ans =
""
"bcabbcb"
"acac"
"bbcbcc"
"abcbc"
--> // Consecutive separators are not squeezed:
--> strsplit("abbcccdde", "c")'
ans =
"abb" "" "" "dde"
--> // With several possible separators:
--> t = "aabcabbcbaaacacaabbcbccaaabcbc";
--> [c, s] = strsplit(t, ["aa" "bb"]);
--> c', s'
ans =
"" "bca" "cb" "acac" "" "cbcc" "abcbc"
ans =
"aa" "bb" "aa" "aa" "bb" "aa"
--> strcat([c';[s' ""]]) == t
ans =
T
--> // Let's limit the number of split to 4, => 4 chunks + unprocessed tail:
--> strsplit("aabcabbcbaaacacaabbcbccaaabcbc", ["aa" "bb"], 4)'
ans =
"" "bca" "cb" "acac" "bbcbccaaabcbc"
--> // Splitting a string ending with a separator yields a final "":
--> strsplit("aabcabbcbaaacacaabbcbccaaabcbc", "cbc")'
ans =
"aabcabbcbaaacacaabb" "caaab" ""
Использование регулярного выражения в качестве ножниц:
[c, s] = strsplit("C:\Windows\System32\OpenSSH\", "/\\|:/"); c', s' [c, s] = strsplit("abcdef8ghijkl3mnopqr6stuvw7xyz", "/\d+/", 2); c', s' | ![]() | ![]() |
--> [c, s] = strsplit("C:\Windows\System32\OpenSSH\", "/\\|:/");
--> c', s'
ans =
"C" "" "Windows" "System32" "OpenSSH" ""
ans =
":" "\" "\" "\" "\"
--> [c, s] = strsplit("abcdef8ghijkl3mnopqr6stuvw7xyz", "/\d+/", 2);
--> c', s'
ans =
"abcdef" "ghijkl" "mnopqr6stuvw7xyz"
ans =
"8" "3"