Я хочу найти элементы, соответствующие пространствам имен / контекстам классов в C ++, которые не являются std
или глобальной областью
Я использую это:
>>> re.findall("(?<!std)::(\w+)","my_namespace::my_function std::vector ::open i=0;::open")
['my_function', 'open', 'open']
, поэтому vector
отфильтровывается, как я и ожидал, но извлекается также глобальная область open
(мне нужно непустое слово перед ::
, которое не std
, а ;
не соответствует)
Я знаю, что могу извлечь пространство имен, а также имя и пост-процесс следующим образом:
>>> [b for a,b in re.findall("(\w+)::(\w+)","my_namespace::my_function std::vector ::open i=0;::open") if a != 'std']
['my_function']
но есть ли способ регулярного выражения сделать это?