В Python 3.6, set()
теперь должен сохранить порядок, но есть другое решение для Python 2 и 3:
>>> x = [1, 2, 20, 6, 210]
>>> sorted(set(x), key=x.index)
[1, 2, 20, 6, 210]
Используйте ИЛИ" |
" оператор:
>>> re.sub(r'(^|\W)GBP([\W\d])', u'\g<1>£\g<2>', text)
u'\xa3 5 Off when you spend \xa375.00'
\b
граница слова, которая может быть пробелом, начало строки или неалфавитно-цифрового символа (\bGBP\b
).
Это заменяет фунт стерлингов, если ему предшествует запуск строки или граница слова (который запуск строки уже), и после того, как фунт стерлингов поступает числовое значение или граница слова:
re.sub(u'\bGBP(?=\b|\d)', u'£', text)
Это устраняет необходимость любого ненужного backreferencing при помощи предвидение . Включительно достаточно?
Можно всегда обрезать ведущий и запаздывающий пробел от маркера перед поиском, если это не ситуация с соответствием/группировкой, которая требует сплошной линии.
Да, почему нет?
re.sub(u'^\W*GBP...
соответствия запуск строки, 0 или больше пробелов, затем фунт стерлингов...
редактирование : О, я думаю, что Вы хотите чередование, используете |
:
re.sub(u'(^|\W)GBP...
Это работает в Perl:
$text = 'GBP 5 off when you spend GBP75';
$text =~ s/(\W|^)GBP([\W\d])/$1\$2/g;
printf "$text\n";
вывод:
$ 5 off when you spend $75
Примечание, что я предусмотрел, что соответствие должно быть глобальным, для получения всех случаев.