Регулярные выражения в GNU Octave
Материал из Xgu.ru
Автор: Владимир Кореньков
Содержание |
[править] Основные понятия
Наиболее часто решаемыми задачами при обработке текстовой информации (например, файла с исходными данными) является поиск фрагментов, удовлетворяющих заданным условиям, и выполнение над ними некоторых операций (удаления, замены на другой фрагмент, извлечения для дальнейшего использования и т. п.). Условия поиска можно достаточно просто выразить в виде своеобразной "формулы", что-то наподобие: найти в тексте все слова, состоящие из 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 =
e =
- 53 78
te =
- 73 112
{
}
- [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 |
) |
Замечание! В общем случае не существует единого алгоритма написания регулярных выражений, т.е. к одному и тому же результату можно придти используя различные шаблоны. Касательно шаблонов, используемых в данной статье, то в учебных целях они представляются в "упрощенном и развернутом виде" (естественно, их можно усовершенствовать). |
Теперь касательно параметров функции 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)
[править] Дополнительная информация
- Фридл Дж. Регулярные выражения. Библиотека программиста. — СПб.: Питер, 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]
GNU Octave Инсталляция |
Синтаксис языка |
Командная строка
|
---|