Команда ReQL: match
Синтаксис команды
string.match(regexp) → None/object
Описание
Сопоставляет строку с регулярным выражением. Если совпадение найдено, возвращает объект с полями:
-
str: Совпавшая строка -
start: Начало совпавшей строки -
end: Конец совпавшей строки -
groups: Группы захвата, определённые в скобках
Если совпадение не найдено, возвращает None.
Поддерживает синтаксис RE2. Для выполнения нечувствительного к регистру поиска добавьте префикс (?i). См. документацию RE2 для других флагов.
Команда match не поддерживает обратные ссылки.
Пример: Получить всех пользователей, чьё имя начинается с «A». Так как None вычисляется как false в фильтре, можно просто использовать результат match для предиката.
r.table('users').filter(lambda doc:
doc['name'].match("^A")
).run(conn)
Пример: Получить всех пользователей, чьё имя заканчивается на «n».
r.table('users').filter(lambda doc:
doc['name'].match("n$")
).run(conn)
Пример: Получить всех пользователей, чьё имя содержит «li».
r.table('users').filter(lambda doc:
doc['name'].match("li")
).run(conn)
Пример: Получить всех пользователей, чьё имя «John» (нечувствительно к регистру).
r.table('users').filter(lambda doc:
doc['name'].match("(?i)^john$")
).run(conn)
Пример: Получить всех пользователей, чьё имя состоит только из символов от «a» до «z».
r.table('users').filter(lambda doc:
doc['name'].match("(?i)^[a-z]+$")
).run(conn)
Пример: Получить всех пользователей, чьё почтовое индекс состоит из 5 цифр.
r.table('users').filter(lambda doc:
doc['zipcode'].match("\d{5}")
).run(conn)
Пример: Извлечь домен из почтового адреса.
r.expr("name@domain.com").match(".*@(.*)").run(conn)
Результат:
{
"start": 0,
"end": 20,
"str": "name@domain.com",
"groups":[
{
"end": 17,
"start": 7,
"str": "domain.com"
}
]
}
Затем можно извлечь домен с помощью селектора [].
r.expr("name@domain.com").match(".*@(.*)")["groups"][0]["str"].run(conn)
Возвращает 'domain.com'
Пример: Не удалось разобрать домен, возвращается None.
r.expr("name[at]domain.com").match(".*@(.*)").run(conn)
© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/python/match/