Python正则表达式中的空格

Python正则表达式中的空格,python,regex,spaces,Python,Regex,Spaces,我目前正在编写一个Python脚本,它将搜索整个.c或.h文件,并找到所有函数定义,这样我就可以进行一些轻微的编辑。为了找到所有的函数定义,我尝试使用正则表达式 我目前拥有的是: "r'\w+?\s+?\w+?\s*?\(.*?\)[\n\s]*?{" 此逻辑的问题在于,在某些情况下,它当前将接受某些if语句。例如: else if(//herpderp){} 它这样做是因为\s包括\n。我觉得如果我让我的表达式只查找空格而不是任何空格,我就不会有这个问题,但是我无法测试我的理论,因为

我目前正在编写一个Python脚本,它将搜索整个
.c
.h
文件,并找到所有函数定义,这样我就可以进行一些轻微的编辑。为了找到所有的函数定义,我尝试使用正则表达式

我目前拥有的是:

"r'\w+?\s+?\w+?\s*?\(.*?\)[\n\s]*?{"
此逻辑的问题在于,在某些情况下,它当前将接受某些
if
语句。例如:

else
   if(//herpderp){}
它这样做是因为
\s
包括
\n
。我觉得如果我让我的表达式只查找空格而不是任何空格,我就不会有这个问题,但是我无法测试我的理论,因为似乎只有一个简单的空格没有
\(在这里插入字母)


这就是问题所在。如果您对如何修复我的正则表达式有任何建议,或者有没有更好的方法来编写脚本,请告诉我

使用单个空格可以匹配单个空格,与匹配任何其他非元字符的方式相同:

"r'\w+? +?\w+? *?\(.*?\)\s*?{"
“+?”
序列只匹配一个或多个空格,而不是贪婪地匹配。我将
[\n\s]
替换为
\s
,因为
\n
已经包含在内

可以扩展到包含更多类型空格的字符类:

[ \t]
它将匹配一个空格或选项卡

它这样做是因为\s包括\n

我不确定这是否是一个好的理论,因为用C写这样的东西是允许的:

int


    main()
一种可能的方法是使用黑名单或白名单,以确保您获得的是一个函数。例如:

r'\b(int|float|double|char)\s+(\w+)\s*\([^)]*\)\s*{'   // whitelist


注意:不需要使用惰性量词。

公平地说,我不认为C是一种常规语言,所以正则表达式不适合解析它。在他的编辑器中重构它可能比编写Python程序更容易:)@AdamSmith:我不是C专家,但我不确定参数中是否允许嵌套括号。在任何情况下,一种语言是否正常,对于现代正则表达式引擎(特别是新的正则表达式模块)来说都不再是问题。我没有使用正则表达式模块——它值得学习吗?@AdamSmith:是的,它易于安装(没有问题),相对容易学习和使用(与re模块向后兼容),并且具有在其他脚本语言中找不到的非常有趣的功能(如模糊搜索)
r'(?!(?:else)\b)\b(\w+)\s+(\w+)\s*\([^)]*\)\s*{'    // blacklist