Регулярные выражения в GNU Octave

Материал из Xgu.ru

Перейти к: навигация, поиск
stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

Если вы считаете, что её стоило бы доработать как можно быстрее, пожалуйста, скажите об этом.

Автор: Владимир Кореньков

Содержание

[править] Основные понятия

Наиболее часто решаемыми задачами при обработке текстовой информации (например, файла с исходными данными) является поиск фрагментов, удовлетворяющих заданным условиям, и выполнение над ними некоторых операций (удаления, замены на другой фрагмент, извлечения для дальнейшего использования и т. п.). Условия поиска можно достаточно просто выразить в виде своеобразной "формулы", что-то наподобие: найти в тексте все слова, состоящие из 4-х цифр, разделенных точкой, и находящихся в конце строки. Для формализованной записи подобных условий используются регулярные выражения - по сути представляющие собой набор правил для описания текстовых строк.

В пределах одной статьи невозможно рассказать обо всем многообразии мира регулярных выражений, поэтому перед изучением дальнейшего материала "непосвященным" рекомендуется предварительно ознакомится с fgf

[править] Шаблоны

Необходимо отметить, что язык Octave содержит все "стандартные" операторы.

Метасимволы
\ - экранирование (считать следующий метасимвол как обычный символ)
. - один произвольный символ, кроме \n - конец строки
^ - начало строки
$ - конец строки
| - альтернатива (логическое ИЛИ)
( ) - оператор группирования выражений
[ ] - обозначение класса (списка) символов


Специальные символы
\w - алфавитно-цифровой символ (любая буква, цифра или символ подчеркивания "_")
\W - любой символ, кроме буквы, цифры или символа подчеркивания "_"
\s - соответствует любому "пробельному" символу (пробел, табуляция, символ новой строки и т.п.)
\S - любой символ, кроме "пробельного"
\d - соответствует цифре
\D - соответствует любому символу, кроме цифры
\b - граница слова
\B - отсутствие границы слова
\< - начало слова
\> - конец слова


Квантификаторы
* - выражение повторяется 0 или большее число раз
+ - повторяется 1 или большее число раз
? - 0 или 1 раз
{n} - точно n раз
{n,} - по меньшей мере 1 раз
{n,m} - повторяется не меньше n, но и не больше m раз


[править] Функции проверки совпадения

Синтаксис:

[s, e, te, m, t, nm] = regexp (str, pat)

где str - строка в которой ищется совпадение, pat - шаблон поиска.

Значение s, e, te, m, t, nm проще объяснить на следующем примере.

Пример 1. Поиск web-адресов в строке

> String = "Additional information about Octave is available at http://www.octave.org or http://www.gnu.org/software/octave/";
> Pattern = '(http\:\/\/[a-z./]+)';
> [s,e,te,m,t,nm] = regexp(String, Pattern)
s =
53 78
e =
73 112
te =
{
[1,1] = 53 73
[1,2] = 78 112
}
m =
{
[1,1] = http://www.octave.org
[1,2] = http://www.gnu.org/software/octave/
}
t =
{
[1,1] =
{
[1,1] = http://www.octave.org
}
[1,2] =
{
[1,1] = http://www.gnu.org/software/octave/
}
}


Начнем по-порядку, с разбора регулярного выражения:

( - скобки используются для ссылки на найденный текст
http - web-адрес должен начинаться с названия протокола http
\: - экранируем символ двоеточия ":"
\/\/ - экранируем символы слэш "//"
[a-z./] - web-адрес может включать любую латинскую строчную букву и/или символ "." либо "/"
+ - таких сочетаний должно быть >= 1
)


Tip-icon.gif

Замечание! В общем случае не существует единого алгоритма написания регулярных выражений, т.е. к одному и тому же результату можно придти используя различные шаблоны. Касательно шаблонов, используемых в данной статье, то в учебных целях они представляются в "упрощенном и развернутом виде" (естественно, их можно усовершенствовать).


Теперь касательно параметров функции regexp:

s - позиция в строке первого символа совпадения шаблона (в данном случае с позиции 53 начинается адрес http://www.octave.org, а с 78 - http://www.gnu.org/software/octave/)
e - позиция в строке последнего символа совпадения шаблона (на позиции 73 заканчивается подстрока http://www.octave.org, а 112 - http://www.gnu.org/software/octave/)
te - массив содержащий позиции начала и конца каждого фрагмента (фактически сочетание предыдущих двух параметров)
m - содержит текст каждой успешно найденной подстроки по шаблону
t - содержит текст каждой успешно найденной ссылки на текст: подстроки, заключенной в шаблоне в скобки "( )"


Пример 2. Поиск web-адресов в строке


Пример использования


[править] Функции подстановки фрагментов

string = regexprep (str, pat, repstr, options)

[править] Дополнительная информация

  1. Фридл Дж. Регулярные выражения. Библиотека программиста. — СПб.: Питер, 2001. 352 с. ISBN 5-318-00056-8.

[править] Всякие фокусы

[править] Проверка числа на простоту с помощью регулярных выражений

Просто прикольно.

import re
def is_prime (num):
    return re.match(r"^1?$|^(11+?)\1+$",'1'*num) is None

Источник: [1]

Octave GNU Octave

Инсталляция | Синтаксис языка | Командная строка
Скрипты | Функции | Регулярные выражения | Массивы | Графики | Ввод/вывод данных
Распределенные вычисления | Численные методы | Сплайны