Совпадение со всеми [AZ], но не дубликаты [дубликаты]

1

Мне нужно сопоставить все строчные буквы в строке, но не дублировать одну и ту же букву в python, который я использовал

from re import compile

regex = compile('[A-Z]')
variables = regex.findall('(B or P) and (P or not Q)')

но это будет соответствовать ['B', 'P', 'P', 'Q'], но мне нужно ['B', 'P', 'Q'].

Заранее спасибо!

  • 0
    Хотите ли вы не сопоставлять строки с дубликатами, или вы просто хотите отфильтровать дубликаты из ваших результатов? Если последнее, используйте set .
Теги:

2 ответа

3

Вы можете использовать негативный просмотр с обратной ссылкой, чтобы избежать совпадения дубликатов:

re.findall(r'([A-Z])(?!.*\1.*$)', '(B or P) and (P or not Q)')

Это возвращает:

['B', 'P', 'Q']
  • 1
    Я думаю, что это «правильный» ответ
  • 0
    Просто xkcd.com/208 .
0

И если дело касается дела:

print(sorted(set(variables),key=variables.index))

Или если у вас есть пакет more_itertools:

from more_itertools import unique_everseen as u
print(u(variables))

Или, если версия> = 3.6:

print(list({}.fromkeys(variables)))

Или OrderedDict:

from collections import OrderedDict
print(list(OrderedDict.fromkeys(variables)))

Все воспроизводят:

['B', 'P', 'Q']

Ещё вопросы

Сообщество Overcoder
Наверх
Меню