2010-11-21 149 views
1

我正在使用一个正则表达式来检查一个字符串,它是否是一个函数。 我检查正则表达式如下:正则表达式进一步检查

regex=r' \w+[\ ]*\(.*?\)*' 

它succefully检查是否字符串包含一个函数或没有。 但是它抓住了正常的字符串,其中包含第一个桶的值,比如“test(test of test)”。

所以我不得不进一步检查,如果有函数名和一个空间,不会被捕获为match.So括号我没有其他检查如下:

regex2=r'\s' 

它成功地工作,并能区分“test()”和“test()”。 但现在我必须保持另一个条件,如果括号后面没有空格(例如test()abcd),它不会将其作为函数捕获它。正则表达式应该只会在匹配时视为匹配“test()abcd”。 但我试过使用不同的正则表达式,不幸的是这些都不起作用。 她提到检查字符串的一件事是在它找到匹配时插入列表中,而在第二步中它只检查字符串的一部分。例如: 字符串:这是一个python函数test()abcd 首先它将检查函数的字符串,当查找与函数test() 匹配时,则仅发送“test()”,以确定“test”和“()”之间是否存在间隙。 在这最后一步,我必须找到“测试()”和“abcd”之间是否有任何差距。如果有差距,它将不会显示匹配作为函数,否则作为字符串的正常部分。 我应该如何为这种情况编写正则表达式?

正则表达式将在以下情况下显示:

1.test() abc 
2.test(as) abc 
3.test() 

不会当作一个函数,如果:

1.test (a)abc 
2.test()abc 
+0

你想匹配python函数吗?如果是这样,你是否试图匹配定义或呼叫? – aaronasterling 2010-11-21 05:03:45

+0

不,我想匹配主要是C风格的功能,和正则表达式匹配所有类型的函数。这两种情况下的功能和调用。 – mushfiq 2010-11-21 05:05:47

回答

1
(\w+\([^)]*\))(\s+|$) 

Bascially你要确保它结束无论是空格还是行尾。

BTW的琪琪工具是非常有用的用于调试的Python重:http://code.google.com/p/kiki-re/

0
regex=r'\w+\([\w,]+\)(?:\s+|$)' 
+0

我尝试过使用正则表达式= r'\ w + \ s + \\([\ w,] +?\\)\ s +',但它不能捕捉“test test()” – mushfiq 2010-11-21 05:32:43

+0

'test'现在是可选的空间 – user514868 2010-11-21 05:35:16

+0

实际上它应该在以下情况下找到匹配:函数test(),test(),test(a),test(a)aas,不应该捕获test(),test()asa。 – mushfiq 2010-11-21 05:39:49

0


我在一开始我只是chexked对于有串解决了这个问题“()”使用正则表达式:

regex = r' \w+[\ ]*\(.*?\)\w*' 

然后检查函数名和支架之间的两个空间,也间隙的括号后,我用以下正则表达式函数:

 def testFunction(self, func): 
      a=" " 
      func=str(func).strip() 
      if a in func: 
       return False 
      else: 
       a = re.findall(r'\w+[\ ]*', func) 
       j = len(a) 
       if j<=1: 
        return True 
       else: 
        return False 

因此它现在可以区分“test()abc”和“test()abc”。
谢谢