Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Français - Português - 日本語 -
Справка Scilab >> Строки > strsplit

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() 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"

Смотрите также

  • tokens — Делит текст, используя разделители и выдаёт его части.
  • strindex — поиск положения символьной строки в другой строке
  • part — выделение строк
  • regexp — поиск подстроки, соответствующей строке регулярного выражения
  • strcat — связывает символьные строки
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Mon Jan 03 14:39:58 CET 2022