匹配所有[A-Z],但不重复

时间:2018-09-24 03:24:38

标签: python regex

我需要匹配字符串中的所有大写字母,但不能匹配我一直在使用的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']。

谢谢!

2 个答案:

答案 0 :(得分:3)

您可以使用带有反向引用的否定超前查询来避免匹配重复项:

{
id: "10",
proyek: "JuZka",
created_at: "2018-08-12 01:54:04",
updated_at: "2018-09-23 05:49:13",
modul: [ ]
},

这将返回:

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

答案 1 :(得分: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']