Мне нужно сопоставить все строчные буквы в строке, но не дублировать одну и ту же букву в 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'].
Заранее спасибо!
Вы можете использовать негативный просмотр с обратной ссылкой, чтобы избежать совпадения дубликатов:
re.findall(r'([A-Z])(?!.*\1.*$)', '(B or P) and (P or not Q)')
Это возвращает:
['B', 'P', 'Q']
И если дело касается дела:
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']
set
.