2016-04-14 34 views
1

Python ile kaynak dosyalarımda bir desen bulmaya çalışıyorum.Python: dosyaları regex ile substring bulmak

import os 
import re 

data=[] 
pattern = re.compile('LocalizedString(.*)') 

for dirname, dirnames, filenames in os.walk('.'): 
    for filename in filenames: 
     if '.m' in filename: 
      with open(os.path.join(dirname, filename),'r') as f: 
       for line in f: 
        matchObj = pattern.findall(line) 
        if matchObj: 
         for match in matchObj: 
          print "match : ", match 

    if '.git' in dirnames: 
     dirnames.remove('.git') 

    if '.svn' in dirnames: 
     dirnames.remove('.svn') 

Ben kaynak kodu içinde LocalizedString() çağrısının tüm parametre almak istiyorum, örneğin: Bu i kod budur kaynak kodunda
:

[_deleteButton setTitle:LocalizedString(@"Delete my Account") forState:UIControlStateNormal]; 

Ben @"Delete my Account" almak istiyorum ama Ben:

match : (@"Delete my Account") forState:UIControlStateNormal]; 
+0

'' '' Parametrede olabileceği durumlar olacak mı? –

+0

Eh, iOS kod ayrıştırma bir normal ifade için uygun olmayabilir. Sadece bazı özel içerikler için. –

cevap

1

Sorun, deseninizde bir grup oluşturmak için köşeli ayraçlar kullanmanızdır. Ancak, ifadenin başlangıcını ve sonunu belirtmeniz gerekir. Kullanım bunun için parantez kaçtı:

LocalizedString\((.*)\) 

regex101 üzerine göz atın.

+1

YerelleştirilmişString() 'den sonra başka bir parantez çifti varsa ne olur? –

+0

@ WiktorStribiżew Önemli değil, çünkü.. * ', Sonraki ifadenin son oluşumuna kadar her şeyle eşleşir. İşte bir örnek: https://regex101.com/r/bH4nL2/3 – cansik

+1

Sanırım Wiktor'un kullanım durumu şu şekildedir: [_deleteButton setTitle: LocalizedString (@ "Hesabımı Sil") forState: UIControlStateNormal](); ' – Adib