Python - 正则表达式首先找到第二场比赛

时间:2015-04-19 19:43:03

标签: python regex

Python正则表达式有点问题。

我需要在这个字符串中找到函数的名称:(我的文件中的字符串中的(数字)不是)

(1)void f(int test);
(2)void h(int test);
(3)double f(int test1, int test2, ...);
(4)double f(int test1, int test2);

我有这段代码:

namePattern = "^[\s\S]*?\s?[*\s]*([a-zA-Z_][a-zA-Z_0-9]*)\s*\([\S\s]*?\).*?$"
functionName = re.sub(re.compile(namePattern, re.MULTILINE), r'\1', funcString)

当我打印functionName时,它首先打印(3) f 函数,当我首先需要写(1) f 函数时。

任何人都可以帮助我确保正则表达式首先找到(1) f 函数吗?感谢。

BTW我无法理解为什么它首先找到第二个函数 f 函数。不是第一个,不是最后一个,而是第二个。这很奇怪。

1 个答案:

答案 0 :(得分:0)

re.findall与以下正则表达式一起使用:

>>> s="""(1)void f(int test);
... (2)void h(int test);
... (3)double f(int test1, int test2, ...);
... (4)double f(int test1, int test2);"""

>>> re.findall(r'(\(\d\))[^( ]*(.*)\(',s)
[('(1)', ' f'), ('(2)', ' h'), ('(3)', ' f'), ('(4)', ' f')]

正则表达式r'(\(\d\))[^( ]*(.*)\('包含2个捕获分组,第一个是(\(\d\)),它将匹配括号内的数字,第二个是(.*),它将匹配(之前的任何内容在[^( ]*之后