В Python 3.5 вы также можете использовать этот синтаксис в list
, dict
, tuple
и set
отображениях (также иногда называемых литералами). См. PEP 488: Дополнительные распакованные обобщения .
>>> (0, *range(1, 4), 5, *range(6, 8))
(0, 1, 2, 3, 5, 6, 7)
>>> [0, *range(1, 4), 5, *range(6, 8)]
[0, 1, 2, 3, 5, 6, 7]
>>> {0, *range(1, 4), 5, *range(6, 8)}
{0, 1, 2, 3, 5, 6, 7}
>>> d = {'one': 1, 'two': 2, 'three': 3}
>>> e = {'six': 6, 'seven': 7}
>>> {'zero': 0, **d, 'five': 5, **e}
{'five': 5, 'seven': 7, 'two': 2, 'one': 1, 'three': 3, 'six': 6, 'zero': 0}
Он также позволяет распаковывать несколько итераций в одном вызове функции.
>>> range(*[1, 10], *[2])
range(1, 10, 2)
( Благодаря mgilson для ссылки PEP.)
Вот еще один способ: (используя негативный прогноз вперед ):
^/(?!ignoreme|ignoreme2|ignoremeN)([a-z0-9]+)$
Примечание: существует только одно фиксирующее выражение: ([a-z0-9]+)
.
Это должно сделать это:
^/\b([a-z0-9]+)\b(?<!ignoreme|ignoreme2|ignoreme3)
Вы можете добавить столько игнорируемых слов, сколько хотите, вот простая реализация PHP:
$ignoredWords = array('ignoreme', 'ignoreme2', 'ignoreme...');
preg_match('~^/\b([a-z0-9]+)\b(?<!' . implode('|', array_map('preg_quote', $ignoredWords)) . ')~i', $string);
Как вы хотите исключить оба слова, вам понадобится объединение:
^/(?!ignoreme$)(?!ignoreme2$)[a-z0-9]+$
Теперь оба условия должны быть истинными (ни ignoreme , ни ignoreme2 разрешено), чтобы иметь соответствие.
/ignoremenot
, а за /
следует ignoreme
.
– Gumbo
22 December 2014 в 08:16
(\?(.+))?$
должен быть быстрым. Я бы не стал слишком беспокоиться о скорости. – Seth 17 January 2010 в 21:25java.util.regex.Pattern
Java. – Mark Jeronimus 20 June 2013 в 19:27