Регулярное выражение: матч начинается или пробел

В Python 3.6, set() теперь должен сохранить порядок, но есть другое решение для Python 2 и 3:

>>> x = [1, 2, 20, 6, 210]
>>> sorted(set(x), key=x.index)
[1, 2, 20, 6, 210]
48
задан Chad Birch 3 April 2009 в 21:49
поделиться

7 ответов

Используйте ИЛИ" |" оператор:

>>> re.sub(r'(^|\W)GBP([\W\d])', u'\g<1>£\g<2>', text)
u'\xa3 5 Off when you spend \xa375.00'
54
ответ дан Zach Scrivena 7 November 2019 в 22:26
поделиться

\b граница слова, которая может быть пробелом, начало строки или неалфавитно-цифрового символа (\bGBP\b).

35
ответ дан Motti 7 November 2019 в 22:26
поделиться

Это заменяет фунт стерлингов, если ему предшествует запуск строки или граница слова (который запуск строки уже), и после того, как фунт стерлингов поступает числовое значение или граница слова:

re.sub(u'\bGBP(?=\b|\d)', u'£', text)

Это устраняет необходимость любого ненужного backreferencing при помощи предвидение . Включительно достаточно?

6
ответ дан Peter Mortensen 7 November 2019 в 22:26
поделиться

Можно всегда обрезать ведущий и запаздывающий пробел от маркера перед поиском, если это не ситуация с соответствием/группировкой, которая требует сплошной линии.

0
ответ дан duffymo 7 November 2019 в 22:26
поделиться

Я думаю, что Вы ищете '(^|\W)GBP([\W\d])'

2
ответ дан Christoph 7 November 2019 в 22:26
поделиться

Да, почему нет?

re.sub(u'^\W*GBP...

соответствия запуск строки, 0 или больше пробелов, затем фунт стерлингов...

редактирование : О, я думаю, что Вы хотите чередование, используете |:

re.sub(u'(^|\W)GBP...
0
ответ дан Svante 7 November 2019 в 22:26
поделиться

Это работает в 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

Примечание, что я предусмотрел, что соответствие должно быть глобальным, для получения всех случаев.

0
ответ дан joel.neely 7 November 2019 в 22:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: