5.5 Обработка строк
Octave поддерживает широкий набор функций для обработки строк. Так как строка — это просто матрица, простые манипуляции можно выполнить с помощью стандартных операторов. Следующий пример демонстрирует, как заменить все пробелы символом нижнего подчеркивания.
quote = ...
"First things first, but not necessarily in that order";
quote( quote == " " ) = "_"
⇒ quote =
First_things_first,_but_not_necessarily_in_that_order Для более сложных манипуляций, таких как поиск, замена и применение регулярных выражений, в Octave доступны следующие функции.
- deblank (s)
-
Удаляет конечные пробелы и нули из s.
Если s — матрица, deblank обрезает каждую строку до длины самой длинной строки. Если s — ячейный массив строк, операция применяется рекурсивно к каждому элементу строки.
Примеры:
deblank (" abc ") ⇒ " abc" deblank ([" abc "; " def "]) ⇒ [" abc " ; " def"]См. также: strtrim.
- strtrim (s)
-
Удаляет начальные и конечные пробелы из s.
Если s — матрица, strtrim обрезает каждую строку до длины самой длинной строки. Если s — ячейный массив строк, операция применяется рекурсивно к каждому элементу строки.
Например:
strtrim (" abc ") ⇒ "abc" strtrim ([" abc "; " def "]) ⇒ ["abc " ; " def"]См. также: deblank.
- strtrunc (s, n)
-
Усекает строку символов s до длины n.
Если s — матрица символов, то количество столбцов корректируется.
Если s — ячейный массив строк, операция выполняется над каждым элементом ячейки, и возвращается новый ячейный массив.
- findstr (s, t)
- findstr (s, t, overlap)
-
Эта функция устарела. Используйте
strfindвместо неё.Возвращает вектор всех позиций в более длинной из двух строк s и t, где начинается вхождение более короткой из двух строк.
Если необязательный аргумент overlap равен true (по умолчанию), возвращаемый вектор может содержать перекрывающиеся позиции. Например:
findstr ("ababab", "a") ⇒ [1, 3, 5]; findstr ("abababa", "aba", 0) ⇒ [1, 5]Внимание:
findstrустарела. Используйтеstrfindво всем новом коде.См. также: strfind, strmatch, strcmp, strncmp, strcmpi, strncmpi, find.
- idx = strchr (str, chars)
- idx = strchr (str, chars, n)
- idx = strchr (str, chars, n, direction)
- [i, j] = strchr (…)
-
Поиск в строке str вхождений символов из набора chars.
Возвращаемое значение(я), а также аргументы n и direction ведут себя идентично как в
find.В большинстве случаев это будет быстрее, чем использование regexp.
См. также: find.
- index (s, t)
- index (s, t, direction)
-
Возвращает позицию первого вхождения строки t в строке s или 0, если вхождение не найдено.
s также может быть строковым массивом или ячейным массивом строк.
Например:
index ("Teststring", "t") ⇒ 4Если direction —
"first", возвращается первый найденный элемент. Если direction —"last", возвращается последний найденный элемент.
- rindex (s, t)
-
Возвращает позицию последнего вхождения строки символов t в строке символов s или 0, если вхождение не найдено.
s также может быть строковым массивом или ячейным массивом строк.
Например:
rindex ("Teststring", "t") ⇒ 6Функция
rindexэквивалентнаindexс установленным direction в"last".
- idx = strfind (str, pattern)
- idx = strfind (cellstr, pattern)
- idx = strfind (…, "overlaps", val)
-
Поиск pattern в строке str и возвращение начального индекса каждого такого вхождения в векторе idx.
Если вхождение не найдено, или pattern длиннее str, или pattern пусто, то idx — пустой массив
[].Необязательный аргумент
"overlaps"определяет, может ли шаблон совпадать в каждой позиции в str (true), или только для уникальных вхождений полного шаблона (false). По умолчанию — true.Если задан ячейный массив строк cellstr, то idx — ячейный массив векторов, как указано выше.
Примеры:
strfind ("abababa", "aba") ⇒ [1, 3, 5] strfind ("abababa", "aba", "overlaps", false) ⇒ [1, 5] strfind ({"abababa", "bebebe", "ab"}, "aba") ⇒ { [1,1] = 1 3 5 [1,2] = [](1x0) [1,3] = [](1x0) }
- str = strjoin (cstr)
- str = strjoin (cstr, delimiter)
-
Объединение элементов ячейного строкового массива cstr в одну строку.
Если delimiter не указан, элементы cstr разделяются пробелом.
Если delimiter указан как строка, элементы ячейного строкового массива объединяются с помощью этой строки. Поддерживаются управляющие последовательности.
Если delimiter — ячейный строковый массив длиной на один меньше, чем cstr, элементы cstr объединяются, чередуя элементы ячейного строкового массива delimiter. Управляющие последовательности не поддерживаются.
strjoin ({'Octave','Scilab','Lush','Yorick'}, '*') ⇒ 'Octave*Scilab*Lush*Yorick'См. также: strsplit.
- strmatch (s, A)
- strmatch (s, A, "exact")
-
Эта функция устарела. Используйте альтернативу, например,
strncmpилиstrcmpвместо неё.Возвращает индексы элементов A, которые начинаются со строки s.
Второй аргумент A должен быть строкой, матрицей символов или ячейным массивом строк.
Если третий аргумент
"exact"не задан, то s необходимо только совпадать с A до длины s. Конечные пробелы и нули в s и A игнорируются при сопоставлении.Например:
strmatch ("apple", "apple juice") ⇒ 1 strmatch ("apple", ["apple "; "apple juice"; "an apple"]) ⇒ [1; 2] strmatch ("apple", ["apple "; "apple juice"; "an apple"], "exact") ⇒ [1]Внимание:
strmatchустарела. Используйтеstrncmp(обычный случай) илиstrcmp(случай"exact") во всем новом коде. Другие возможные замены, в зависимости от приложения, включаютregexpилиvalidatestring.См. также: strncmp, strcmp, regexp, strfind, validatestring.
- [tok, rem] = strtok (str)
- [tok, rem] = strtok (str, delim)
-
Находит все символы в строке str до, но не включая, первого символа, который находится в строке delim.
str также может быть ячейным массивом строк, в этом случае функция выполняется над каждой отдельной строкой и возвращает ячейный массив токенов и остатков.
Начальные разделители игнорируются. Если delim не задан, предполагаются пробелы.
Если rem требуется, оно содержит остаток строки, начиная с первого разделителя.
Примеры:
strtok ("this is the life") ⇒ "this" [tok, rem] = strtok ("14*27+31", "+-*/") ⇒ tok = 14 rem = *27+31
- [cstr] = strsplit (str)
- [cstr] = strsplit (str, del)
- [cstr] = strsplit (…, name, value)
- [cstr, matches] = strsplit (…)
-
Разделение строки str с использованием разделителей, указанных в del, и возвращение ячейного строкового массива подстрок.
Если разделитель не указан, строка разделяется на пробелы
{" ", "\f", "\n", "\r", "\t", "\v"}. В противном случае разделитель del должен быть строкой или ячейным массивом строк. По умолчанию последовательные разделители в входной строке s сводятся к одному, что приводит к одному разделению.Поддерживаемые аргументы name/value:
- collapsedelimiters, который может принимать значение
true(по умолчанию) илиfalse. - delimitertype, который может принимать значение
"simple"(по умолчанию) или"regularexpression". Простой разделитель соответствует тексту точно так, как он написан. В противном случае используется синтаксис регулярных выражений, описанный вregexp.
Необязательный второй вывод matches возвращает разделители, которые были сопоставлены в исходной строке.
Примеры с простыми разделителями:
strsplit ("a b c") ⇒ { [1,1] = a [1,2] = b [1,3] = c } strsplit ("a,b,c", ",") ⇒ { [1,1] = a [1,2] = b [1,3] = c } strsplit ("a foo b,bar c", {" ", ",", "foo", "bar"}) ⇒ { [1,1] = a [1,2] = b [1,3] = c } strsplit ("a,,b, c", {",", " "}, "collapsedelimiters", false) ⇒ { [1,1] = a [1,2] = [1,3] = b [1,4] = [1,5] = c }Примеры с разделителями регулярных выражений:
strsplit ("a foo b,bar c", ',|\s|foo|bar', ... "delimitertype", "regularexpression") ⇒ { [1,1] = a [1,2] = b [1,3] = c } strsplit ("a,,b, c", '[, ]', "collapsedelimiters", false, ... "delimitertype", "regularexpression") ⇒ { [1,1] = a [1,2] = [1,3] = b [1,4] = [1,5] = c } strsplit ("a,\t,b, c", {',', '\s'}, "delimitertype", "regularexpression") ⇒ { [1,1] = a [1,2] = b [1,3] = c } strsplit ("a,\t,b, c", {',', ' ', '\t'}, "collapsedelimiters", false) ⇒ { [1,1] = a [1,2] = [1,3] = [1,4] = b [1,5] = [1,6] = c } - collapsedelimiters, который может принимать значение
- [cstr] = ostrsplit (s, sep)
- [cstr] = ostrsplit (s, sep, strip_empty)
-
Разделение строки s с использованием одного или нескольких разделителей sep и возвращение ячейного массива строк.
Последовательные разделители и разделители на границах приводят к пустым строкам, если strip_empty не равно true. Значение по умолчанию для strip_empty — false.
Двумерные массивы символов разделены разделителями и исходными границами столбцов.
Пример:
ostrsplit ("a,b,c", ",") ⇒ { [1,1] = a [1,2] = b [1,3] = c } ostrsplit (["a,b" ; "cde"], ",") ⇒ { [1,1] = a [1,2] = b [1,3] = cde }
- [a, …] = strread (str)
- [a, …] = strread (str, format)
- [a, …] = strread (str, format, format_repeat)
- [a, …] = strread (str, format, prop1, value1, …)
- [a, …] = strread (str, format, format_repeat, prop1, value1, …)
-
Эта функция устарела. Используйте
textscanвместо неё.Считывает данные из строки.
Строка str разбивается на слова, которые многократно сопоставляются со спецификаторами в format. Первое слово сопоставляется с первым спецификатором, второе — со вторым и так далее. Если слов больше, чем спецификаторов, процесс повторяется до тех пор, пока все слова не будут обработаны.
Строка format описывает, как должны быть обработаны слова в str. Она может содержать любую комбинацию следующих спецификаторов:
%s-
Слово обрабатывается как строка.
%f%n-
Слово обрабатывается как число и преобразуется в двойную точность.
%d%u-
Слово обрабатывается как число и преобразуется в int32.
%*%*f%*s-
Слово пропускается.
Для %s и %d, %f, %n, %u и связанных спецификаторов %*s … допускается указание необязательной ширины, например %Ns, где N — целое число > 1. Для %f допускаются спецификаторы формата, такие как %N.Mf.
literalsКроме того, формат может содержать литеральные строковые символы; эти символы будут пропущены во время чтения.
Обработанные слова, соответствующие первому спецификатору, возвращаются в первом выходном аргументе, и так далее для остальных спецификаторов.
По умолчанию format — "%f", что означает, что числа считываются из str. Это подходит, если str содержит только числовые поля.
Например, строка
str = "\ Bunny Bugs 5.5\n\ Duck Daffy -7.5e-5\n\ Penguin Tux 6"
может быть прочитана с помощью
[a, b, c] = strread (str, "%s %s %f");
Необязательный числовой аргумент format_repeat может использоваться для ограничения количества считываемых элементов:
- -1
-
(по умолчанию) считывает всю строку до конца.
- N
Считывает N раз nargout элементов. 0 (ноль) — приемлемое значение для format_repeat.
Поведение
strreadможет быть изменено с помощью пар свойство-значение. Распознаются следующие свойства:"commentstyle"-
Части str считаются комментариями и будут пропущены. value — стиль комментария и может быть любым из следующих.
-
"shell"Все от#символов до ближайшей конца строки пропускается. -
"c"Все между/*и*/пропускается. -
"c++"Все от//символов до ближайшей конца строки пропускается. -
"matlab"Все от%символов до ближайшей конца строки пропускается. - задаваемый пользователем. Два варианта: (1) Одна строка или 1x1 ячейка строки: Пропустить всё справа от неё; (2) 2x1 ячейка массива строк: Пропустить всё между левой и правой строками.
-
"delimiter"-
Любой символ в value будет использован для разделения str на слова (значение по умолчанию — любой пробел). Обратите внимание, что пробелы неявно добавляются к набору символов-разделителей, если не предоставлен спецификатор преобразования формата
"%s"; см. параметр"whitespace"ниже. Набор символов-разделителей не может быть пустым; при необходимости Octave подставляет пробел в качестве разделителя. "emptyvalue"-
Значение, которое возвращается для пустых числовых значений в данных без пробелов. Значение по умолчанию — NaN. Когда тип данных не поддерживает NaN (например, int32), значение по умолчанию — ноль.
"multipledelimsasone"-
Обрабатывать последовательность последовательных разделителей без пробелов между ними как один разделитель. Последовательности разделителей не обязательно должны быть вертикальными
"aligned". "treatasempty"-
Обрабатывать отдельные вхождения (окружённые разделителями или пробелами) строк в value как пропущенные значения.
"returnonerror"-
Если value true (1, по умолчанию), игнорировать ошибки чтения и возвращать результат нормально. Если false (0), вернуть ошибку.
"whitespace"-
Любой символ в value будет интерпретироваться как пробел и обрезаться; строка, определяющая пробелы, должна быть заключена в двойные кавычки для правильной обработки специальных символов, таких как
"\t". В каждом поле данных несколько последовательных символов пробела сводятся к одному пробелу, и ведущие и хвостовые пробелы удаляются. Значение по умолчанию для пробелов —" \b\r\n\t"(обратите внимание на пробел). Пробелы всегда добавляются к набору символов-разделителей, если не указан хотя бы один спецификатор преобразования формата"%s"; в этом случае только пробелы, явно указанные в"delimiter", сохраняются как разделители и удаляются из набора символов пробелов. Если символы пробела должны сохраняться как есть (например, в строках), укажите пустое значение (т.е."") для"whitespace"; очевидно, пробелы не могут быть разделителями в таком случае.
Когда количество слов в str не соответствует точному кратному количеству спецификаторов преобразования формата, поведение strread зависит от последнего символа str:
- последний символ =
"\n" -
Столбцы данных дополняются пустыми полями или NaN, чтобы все столбцы имели одинаковую длину
- последний символ не
"\n" -
Столбцы данных не дополняются; strread возвращает столбцы неравной длины
- newstr = strrep (str, ptn, rep)
- newstr = strrep (cellstr, ptn, rep)
- newstr = strrep (…, "overlaps", val)
-
Заменяет все вхождения шаблона ptn в строке str строкой rep и возвращает результат.
Необязательный аргумент
"overlaps"определяет, может ли шаблон совпадать в любой позиции в str (true), или только для уникальных вхождений всего шаблона (false). Значение по умолчанию — true.s также может быть массивом ячеек строк, в этом случае замена выполняется для каждого элемента, и возвращается массив ячеек.
Пример:
strrep ("This is a test string", "is", "&%$") ⇒ "Th&%$ &%$ a test string"
- newstr = erase (str, ptn)
-
Удаляет все вхождения ptn в str.
str и ptn могут быть обычными строками, массивом ячеек строк или массивом символов.
Примеры
## string, single pattern erase ("Hello World!", " World") ⇒ "Hello!" ## cellstr, single pattern erase ({"Hello", "World!"}, "World") ⇒ {"Hello", "!"} ## string, multiple patterns erase ("The Octave interpreter is fabulous", ... {"interpreter ", "The "}) ⇒ "Octave is fabulous" ## cellstr, multiple patterns erase ({"The ", "Octave interpreter ", "is fabulous"}, ... {"interpreter ", "The "}) ⇒ {"", "Octave ", "is fabulous"}Примечание по программированию:
eraseудаляет первое вхождение шаблона в строке, когда существуют перекрывающиеся вхождения. Например:erase ("abababa", "aba") ⇒ "b"См.
strrepдля обработки перекрытий.
- substr (s, offset)
- substr (s, offset, len)
-
Возвращает подстроку s, которая начинается с символа с номером offset и имеет длину len символов.
Нумерация позиций для смещений начинается с 1. Если offset отрицательный, извлечение начинается на этом расстоянии от конца строки.
Если len опущено, подстрока продолжается до конца s. Отрицательное значение len извлекает подстроку в пределах len символов от конца строки.
Примеры:
substr ("This is a test string", 6, 9) ⇒ "is a test" substr ("This is a test string", -11) ⇒ "test string" substr ("This is a test string", -11, -7) ⇒ "test"Эта функция создана по аналогии с аналогичной функцией в Perl.
- [s, e, te, m, t, nm, sp] = regexp (str, pat)
- […] = regexp (str, pat, "opt1", …)
-
Сопоставление строк с регулярным выражением.
Поиск pat в str и возвращение позиций и подстрок совпадений, или пустых значений, если совпадений нет.
Сопоставляемый шаблон pat может включать стандартные операторы регулярных выражений, включая:
.-
Сопоставить любой символ
* + ? {}-
Операторы повторения, представляющие
*-
Сопоставить ноль или более раз
+-
Сопоставить один или более раз
?-
Сопоставить ноль или один раз
{n}-
Сопоставить ровно n раз
{n,}-
Сопоставить n или более раз
{m,n}Сопоставить от m до n раз
[…] [^…]-
Операторы списков. Шаблон будет соответствовать любому символу, указанному между
"["и"]". Если первый символ"^", то шаблон инвертируется, и любой символ, кроме указанных между скобками, будет соответствовать.Ниже приведены также эскейп-последовательности, которые можно использовать внутри операторов списков. Например, шаблоном для числа с плавающей точкой может быть
[-+.\d]+. () (?:)-
Оператор группировки. Первый вид, только скобки, также создаёт маркер.
|-
Оператор чередования. Сопоставить одно из нескольких регулярных выражений. Альтернативы должны быть ограничены оператором группировки
()выше. ^ $Операторы привязки. Требует, чтобы шаблон находился в начале (
^) или в конце ($) строки.
Кроме того, следующие эскейп-символы имеют специальное значение.
\d-
Сопоставить любую цифру
\D-
Сопоставить любой нецифровой символ
\s-
Сопоставить любой пробельный символ
\S-
Сопоставить любой непробельный символ
\w-
Сопоставить любой буквенно-цифровой символ
\W-
Сопоставить любой небуквенно-цифровой символ
\<-
Сопоставить начало слова
\>-
Сопоставить конец слова
\BСопоставить внутри слова
Примечание об реализации: Для совместимости с MATLAB, эскейп-последовательности в pat (например,
"\n"=> перевод строки) расширяются даже в том случае, если pat определен с одинарными кавычками. Для отключения расширения используйте двойной обратный слэш перед эскейп-последовательностью (например, "\\n") или функциюregexptranslate.Выходные данные
regexpпо умолчанию имеют порядок, указанный ниже- s
-
Индексы начала каждой подстроки совпадения
- e
-
Индексы окончания каждой подстроки совпадения
- te
-
Пределы каждого сопоставленного маркера, окружённого
(…)в pat - m
-
Массив ячеек текста каждого совпадения
- t
-
Массив ячеек текста каждого сопоставленного маркера
- nm
-
Структура, содержащая текст каждого сопоставленного именованного маркера, при этом имя используется в качестве имени поля. Именованный маркер обозначается
(?<name>…). - sp
Массив ячеек текста, не возвращаемый совпадением, т.е. то, что остаётся, если вы разделите строку на основе pat.
Конкретные выходные аргументы или порядок выходных аргументов могут быть выбраны с помощью дополнительных аргументов opt. Это строки, и соответствие между выходными аргументами и необязательными аргументами таково
'start's 'end'e 'tokenExtents'te 'match'm 'tokens't 'names'nm 'split'sp Дополнительные аргументы подведены ниже.
- ‘once’
-
Возвращает только первое вхождение шаблона.
- ‘matchcase’
-
Делает сопоставление чувствительным к регистру. (по умолчанию)
В качестве альтернативы используйте (?-i) в шаблоне.
- ‘ignorecase’
-
Игнорирует регистр при сопоставлении шаблона со строкой.
В качестве альтернативы используйте (?i) в шаблоне.
- ‘stringanchors’
-
Сопоставляет символы привязки в начале и в конце строки. (по умолчанию)
В качестве альтернативы используйте (?-m) в шаблоне.
- ‘lineanchors’
-
Сопоставляет символы привязки в начале и конце строки.
В качестве альтернативы используйте (?m) в шаблоне.
- ‘dotall’
-
Шаблон
.сопоставляет все символы, включая символ новой строки. (по умолчанию)В качестве альтернативы используйте (?s) в шаблоне.
- ‘dotexceptnewline’
-
Шаблон
.сопоставляет все символы, кроме символа новой строки.В качестве альтернативы используйте (?-s) в шаблоне.
- ‘literalspacing’
-
Все символы в шаблоне, включая пробелы, имеют значение и используются в сопоставлении с шаблоном. (по умолчанию)
В качестве альтернативы используйте (?-x) в шаблоне.
- ‘freespacing’
-
Шаблон может содержать произвольные пробелы и комментарии, начинающиеся с символа ‘#’.
В качестве альтернативы используйте (?x) в шаблоне.
- ‘noemptymatch’
-
Совпадения нулевой длины не возвращаются. (по умолчанию)
- ‘emptymatch’
-
Возвращает совпадения нулевой длины.
regexp ('a', 'b*', 'emptymatch')возвращает[1 2], потому что в позициях 1 и конца строки есть ноль или более'b'символов.
Примечание о ограничениях стека: Поиск шаблонов выполняется с помощью рекурсивной функции, которая может переполнить стек программы, когда имеется большое количество совпадений. Например,
regexp (repmat ('a', 1, 1e5), '(a)+')может привести к ошибке сегментации. В качестве альтернативы можно рассмотреть составление поисков шаблонов, которые уменьшают количество совпадений (например, творчески используя дополнение множеств), а затем дальнейшую обработку возвращаемых переменных (теперь уменьшенного размера) с помощью последовательных
regexpпоисков.
- [s, e, te, m, t, nm, sp] = regexpi (str, pat)
- […] = regexpi (str, pat, "opt1", …)
-
Поиск строк с использованием нечувствительных к регистру регулярных выражений.
Поиск pat в str и возвращение позиций и подстрок совпадений, или пустых значений, если совпадений нет. См. regexp для получения подробностей о синтаксисе шаблона поиска.
См. также: regexp.
- outstr = regexprep (string, pat, repstr)
- outstr = regexprep (string, pat, repstr, "opt1", …)
-
Замена вхождений шаблона pat в string на repstr.
Шаблон представляет собой регулярное выражение, как описано для
regexp. См. regexp.Строка замены может содержать
$i, которая подставляет i-й набор скобок в строке совпадения. Например,regexprep ("Bill Dunn", '(\w+) (\w+)', '$2, $1')возвращает
"Dunn, Bill"Дополнительно к опциям
regexpесть- ‘once’
-
Заменяет только первое вхождение pat в результате.
- ‘warnings’
-
Эта опция присутствует для совместимости, но игнорируется.
Примечание об реализации: Для совместимости с MATLAB, эскейп-последовательности в pat (например,
"\n"=> перевод строки) расширяются, даже если pat определен с одинарными кавычками. Для отключения расширения используйте двойной обратный слэш перед эскейп-последовательностью (например, "\\n") или функциюregexptranslate.
- regexptranslate (op, s)
-
Перевод строки для использования в регулярном выражении.
Это может включать либо замену подстановочных знаков, либо экранирование специальных символов.
Поведение контролируется op, который может принимать следующие значения
"wildcard"-
Символы подстановочных знаков
.,*, и?заменяются подстановочными знаками, подходящими для регулярного выражения. Например:regexptranslate ("wildcard", "*.m") ⇒ '.*\.m' "escape"-
Символы
$.?[], имеющие специальное значение для регулярных выражений, экранируются, чтобы они обрабатывались буквально. Например:regexptranslate ("escape", "12.5") ⇒ '12\.5'
- untabify (t)
- untabify (t, tw)
- untabify (t, tw, deblank)
-
Заменить символы ТАВ в t пробелами.
Входной параметр t может быть двумерной символьной матрицей или ячейкой символьных строк. Выходной параметр имеет тот же тип, что и входной.
Ширина табуляции задаётся параметром tw и по умолчанию равна восьми.
Если необязательный параметр deblank имеет значение «истина», то пробелы будут удалены из конца символьных данных.
Следующий пример считывает файл и записывает его нетабулированную версию с удаленными пробелами в конце.
fid = fopen ("tabbed_script.m"); text = char (fread (fid, "uchar")'); fclose (fid); fid = fopen ("untabified_script.m", "w"); text = untabify (strsplit (text, "\n"), 8, true); fprintf (fid, "%s\n", text{:}); fclose (fid);
- idx = unicode_idx (str)
-
Возвращает массив с индексами каждого символа в кодировке UTF-8 в str.
unicode_idx ("aäbc") ⇒ [1, 2, 2, 3, 4]
© 1996–2022 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v5.2.0/Manipulating-Strings.html