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 >> |