Python正则表达式中的空格

时间:2014-06-23 15:08:57

标签: python regex spaces

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

我目前拥有的是:

"r'\w+?\s+?\w+?\s*?\(.*?\)[\n\s]*?{"

这种逻辑的问题在于它在某些情况下目前会接受某些if语句。例如:

else
   if(//herpderp){}

这样做是因为\s包含\n。如果我的表达式只查找空格而不是任何空格,我觉得我不会遇到这个问题,但我无法测试我的理论,因为似乎没有\(insert letter here)只是一个简单的空间。

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

2 个答案:

答案 0 :(得分:2)

使用单个空格可以匹配单个空格,就像您匹配任何不属于元字符的其他字符一样:

"r'\w+? +?\w+? *?\(.*?\)\s*?{"

' +?'序列只匹配一个或多个空格,非贪婪。我已将[\n\s]替换为\s,因为已包含\n

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

[ \t]

可以匹配空格或制表符。

答案 1 :(得分:1)

  

这样做是因为\ s包含\ n

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

int


    main()

一种可能的方法是使用黑名单或白名单来确保您获得的是一种功能。例如:

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

r'(?!(?:else)\b)\b(\w+)\s+(\w+)\s*\([^)]*\)\s*{'    // blacklist

注意:不需要使用延迟量词。