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 函数。不是第一个,不是最后一个,而是第二个。这很奇怪。
答案 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\))
,它将匹配括号内的数字,第二个是(.*)
,它将匹配(
之前的任何内容在[^( ]*
之后