strsplit
разделение единой строки по заданным позициям или шаблонам
Синтаксис
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)
Аргументы
- string
- единая символьная строка, которую нужно разделить. Поддерживаются расширенные символы UTF8.
- indices
- вектор индексов в порядке возрастания в интервале
[1, length(string)-1]. - separators
- матрица строк, искомых в
stringи используемых в качестве ножниц. Поддерживаются расширенные символы UTF8. - regexp
- единая строка, начинающаяся и оканчивающаяся символом "/"
и определяющая шаблон регулярного выражения, чувствительного к регистру,
используемая в качестве разделителя разделения. Опция
regexpможет не использоваться после завершающего разделителя "/". Регулярное выражение может включать в себя расширенные символы UTF8. Символы "/" и "\", используемые в телеregexpдолжны быть защищены как "\/" и "\\". Например:"/k.{2}o/". - chunks
- столбец строк с
length(indices)+1элементов, соответствующим разделённым кусочкам. - matched_separators
- столбец строк размером
size(chunks,1)-1: совпавшие разделители или шаблоны выражений. - limit
- целое число > 0: максимальное число найденных и использованных
разделителей в
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")' strsplit("αβδεϵζηθικλμνξοπρστυφϕχψω", [1 6 11])
--> 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"
Смотрите также
| Report an issue | ||
| << strrev | Строки | strspn >> |
