【发布时间】:2016-03-19 13:35:12
【问题描述】:
我有一个平面文件,其中有一个 C++ 函数名及其部分声明,如下所示:
virtual void NameSpace1::NameSpace2::ClassName1::function_name1(int arg1) const
void function_name2
void NameSpace2::NameSpace4::ClassName2::function_name3
function_name4
我正在尝试使用这一行单独提取函数名称:
fn_name = re.match(":(.*?)\(?", lines)
我可以理解为什么 function_name2 和 function_name4 不匹配(因为没有前导 :。但我看到即使对于 function_name1 和 function_name3,它也不会进行非贪婪匹配.fn_name.group()的输出是
:NameSpace2::ClassName1::function_name1
我有三个问题:
- 我希望只从第 1 行提取字符串“
function_name1”,但非贪婪匹配似乎不起作用。为什么? - 为什么没有提取第 3 行?
- 如何使用单个正则表达式从所有行中获取函数名称?
请帮忙。
【问题讨论】:
-
您知道
re.match从字符串的开头开始匹配吗?您的所有字符串都没有以冒号开头。你试过re.search吗? -
懒惰匹配也不会影响正则表达式开始匹配的位置——它只会影响匹配的结束
标签: python regex python-2.7 non-greedy