如何创建一个负面的后视表达式 - 添加 - 不能是一个空词
how to create a negative lookbehind expression that - added - must not be an empty word
我想在 C++ 中找到匹配 namespaces/class 上下文的元素,这些元素不是 std
或全局范围
我正在使用这个:
>>> re.findall("(?<!std)::(\w+)","my_namespace::my_function std::vector ::open i=0;::open")
['my_function', 'open', 'open']
所以 vector
如我所料被过滤掉了,但是全局范围的 open
也被提取了(我需要在 ::
之前有一个非空词,它不是 std
,;
不符合条件)
我知道我可以像这样提取命名空间和名称以及 post 过程:
>>> [b for a,b in re.findall("(\w+)::(\w+)","my_namespace::my_function std::vector ::open i=0;::open") if a != 'std']
['my_function']
但是有没有纯正则表达式的方法来做到这一点?
您可以添加另一个回顾断言:
>>> re.findall(r"(?<!std)(?<=\w)::(\w+)", "my_namespace::my_function std::vector ::open")
['my_function']
(?<=\w)
检查 ::
前面是否有单词字符
您可以使用像
这样的正则表达式解决方案
re.findall(r'\b(?!std::)\w+::(\w+)', s)
详情
\b
- 单词边界
(?!std::)
- 不允许std::
紧靠当前位置的右侧
\w+::
- 1+ 个单词字符和 ::
(\w+)
- 捕获组 1(re.findall
的实际输出):1+ 个字符。
我想在 C++ 中找到匹配 namespaces/class 上下文的元素,这些元素不是 std
或全局范围
我正在使用这个:
>>> re.findall("(?<!std)::(\w+)","my_namespace::my_function std::vector ::open i=0;::open")
['my_function', 'open', 'open']
所以 vector
如我所料被过滤掉了,但是全局范围的 open
也被提取了(我需要在 ::
之前有一个非空词,它不是 std
,;
不符合条件)
我知道我可以像这样提取命名空间和名称以及 post 过程:
>>> [b for a,b in re.findall("(\w+)::(\w+)","my_namespace::my_function std::vector ::open i=0;::open") if a != 'std']
['my_function']
但是有没有纯正则表达式的方法来做到这一点?
您可以添加另一个回顾断言:
>>> re.findall(r"(?<!std)(?<=\w)::(\w+)", "my_namespace::my_function std::vector ::open")
['my_function']
(?<=\w)
检查::
前面是否有单词字符
您可以使用像
这样的正则表达式解决方案re.findall(r'\b(?!std::)\w+::(\w+)', s)
详情
\b
- 单词边界(?!std::)
- 不允许std::
紧靠当前位置的右侧\w+::
- 1+ 个单词字符和::
(\w+)
- 捕获组 1(re.findall
的实际输出):1+ 个字符。