2010-11-21 152 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」。
謝謝