Регулярные выражения в 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 Инсталляция |
Синтаксис языка |
Командная строка
|
|---|