5.3.5 Поиск и замена в строках ¶
-
:
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.
-
:
[s, e, te, m, t, nm, sp] =regexp(str, pat)¶ -
:
[…] =regexp(str, pat, "opt1", …)¶ -
Сопоставление строк с регулярными выражениями.
Ищет pat в строке str в кодировке UTF-8 и возвращает позиции и подстроки всех совпадений или пустые значения, если совпадений нет.
Шаблон поиска 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], так как есть ноль или более'b'символов в позициях 1 и конца строки.
Примечание по ограничению стека: Поиск по шаблону выполняется с помощью рекурсивной функции, которая может переполнить стек программы при большом количестве совпадений. Например,
regexp (repmat ('a', 1, 1e5), '(a)+')может привести к сбою сегментации. В качестве альтернативы рассмотрите возможность построения поисков по шаблону, которые уменьшают количество совпадений (например, творчески используя дополнение к набору), а затем дальнейшую обработку возвращаемых переменных (теперь уменьшенных по размеру) с помощью последовательных
regexpпоисков.Реализация
regexpв Octave основана на библиотеке Perl Compatible Regular Expressions (https://www.pcre.org/). Для получения более подробного списка операторов синтаксисаregexpсм. "Краткий справочник по синтаксису PCRE".
-
:
[s, e, te, m, t, nm, sp] =regexpi(str, pat)¶ -
:
[…] =regexpi(str, pat, "opt1", …)¶ -
Поиск по шаблону регулярного выражения без учета регистра.
Ищет pat в строке str в кодировке UTF-8 и возвращает позиции и подстроки всех совпадений или пустые значения, если совпадений нет. Подробнее о синтаксисе шаблона поиска см.
regexp.См. также: regexp.
-
:
outstr =regexprep(string, pat, repstr)¶ -
:
outstr =regexprep(string, pat, repstr, "opt1", …)¶ -
Заменяет вхождения шаблона pat в строке string на repstr.
Шаблон является регулярным выражением, как описано в
regexp. См.regexp.Все строки должны быть закодированы в UTF-8.
Строка замены может содержать
$i, которые подставляют i-й набор скобок в строке совпадения. Например,regexprep ("Bill Dunn", '(\w+) (\w+)', '$2, $1')возвращает
"Dunn, Bill"Дополнительные параметры помимо тех, что у
regexp:- ‘once’
-
Заменяет только первое вхождение pat в результате.
- ‘warnings’
-
Этот параметр присутствует для совместимости, но игнорируется.
Примечание об реализации: для совместимости с MATLAB, последовательности экранирования в pat (например,
"\n"=> перевод строки) расширяются даже тогда, когда pat определен с одиночными кавычками. Для отключения расширения используйте две обратные косые черты перед последовательностью экранирования (например, "\\n") или функциюregexptranslate.
-
:
str =regexptranslate(op, s)¶ -
Преобразует строку для использования в регулярном выражении.
Это может включать либо замену подстановочных символов, либо экранирование специальных символов.
Поведение контролируется op, который может принимать следующие значения:
"wildcard"-
Символы подстановки
.,*, и?заменяются подстановочными символами, соответствующими регулярному выражению. Например:regexptranslate ("wildcard", "*.m") ⇒ '.*\.m' "escape"-
Символы
$.?[], имеющие специальное значение для регулярных выражений, экранируются, чтобы они интерпретировались буквально. Например:regexptranslate ("escape", "12.5") ⇒ '12\.5'
© 1996–2023 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/v9.2.0/Searching-and-Replacing-in-Strings.html