Spec-Zone.ru › Octave 8

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.

str также может быть ячейкой строк, в этом случае замена выполняется для каждого элемента, и возвращается ячейка строк.

Пример:

strrep ("This is a test string", "is", "&%$")
    ⇒  "Th&%$ &%$ a test string"

См. также: regexprep, strfind.

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

См. также: strrep, regexprep.

: [s, e, te, m, t, nm, sp] = regexp (str, pat) ¶
: […] = regexp (str, pat, "opt1", …) ¶

Сопоставление строк с использованием регулярных выражений.

Ищет pat в закодированной в UTF-8 строке str и возвращает позиции и подстроки совпадений, или пустые значения, если их нет.

Шаблон pat может содержать любые стандартные операторы регулярных выражений, включая:

.

Соответствует любому символу

* + ? {}

Операторы повторения, представляющие

*

Соответствует нулю или более раз

+

Соответствует одному или более раз

?

Соответствует нулю или одному разу

{n}

Соответствует точно n раз

{n,}

Соответствует n или более раз

{m,n}

Соответствует от m до n раз

[…] [^…]

Операторы списков. Шаблон будет соответствовать любому символу, указанному между "[" и "]". Если первый символ является "^", шаблон инвертируется, и будет соответствовать любой символ, кроме перечисленных в скобках.

Внутри операторов списка также можно использовать escape-последовательности, определённые ниже. Например, шаблон для числа с плавающей запятой может быть [-+.\d]+.

() (?:)

Оператор группировки. Первая форма, только скобки, также создаёт маркер.

|

Оператор чередования. Соответствует одному из набора регулярных выражений. Альтернативы должны быть ограничены оператором группировки () выше.

^ $

Операторы привязки. Требует, чтобы шаблон находился в начале (^) или конце ($) строки.

Кроме того, следующие экранированные символы имеют специальное значение.

\d

Соответствует любой цифре

\D

Соответствует любой не-цифре

\s

Соответствует любому символу пробела

\S

Соответствует любому не-символу пробела

\w

Соответствует любому символу слова

\W

Соответствует любому не-символу слова

\<

Соответствует началу слова

\>

Соответствует концу слова

\B

Соответствует внутри слова

Примечание по реализации: Для совместимости с MATLAB, escape-последовательности в pat (например, "\n" => перевод строки) расширяются, даже если pat определен с использованием одинарных кавычек. Для отключения расширения используйте двойной обратный слэш перед escape-последовательностью (например, "\\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 поисками.

См. также: regexpi, strfind, regexprep.

: [s, e, te, m, t, nm, sp] = regexpi (str, pat) ¶
: […] = regexpi (str, pat, "opt1", …) ¶

Поиск по шаблону регулярного выражения без учета регистра.

Ищет pat в закодированной в UTF-8 строке str и возвращает позиции и подстроки совпадений или пустые значения, если совпадений нет. Подробности синтаксиса шаблона поиска см. в 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 последовательности escape в pat (например, "\n" => новая строка) расширяются даже когда pat определен с одинарными кавычками. Чтобы отключить расширение, используйте двойной обратный слэш перед последовательностью escape (например, "\\n") или используйте функцию regexptranslate .

См. также: regexp, regexpi, strrep.

: str = regexptranslate (op, s) ¶

Преобразует строку для использования в регулярном выражении.

Это может включать либо замену подстановочных знаков, либо экранирование специальных символов.

Поведение контролируется op, который может принимать следующие значения

"wildcard"

Символы подстановочных знаков ., *, и ? заменяются подстановочными знаками, соответствующими регулярному выражению. Например:

regexptranslate ("wildcard", "*.m")
     ⇒ '.*\.m'
"escape"

Символы $.?[], имеющие специальное значение для регулярных выражений, экранируются, чтобы они обрабатывались буквально. Например:

regexptranslate ("escape", "12.5")
     ⇒ '12\.5'

См. также: regexp, regexpi, regexprep.

© 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/v8.1.0/Searching-and-Replacing-in-Strings.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API