2016-04-01 36 views
0

Bilgisayar Bilimleri dersim için Python'da bir dil yapıyorum ve bir dosyadaki bir satırın belirli kısımlarının nasıl okunacağını bilmem gerekiyor. Örneğin, ilk kısımda bir "for" varsa, "()" deki neyi okur, sonra bir "{" olup olmadığını kontrol edin, sonra bir sonraki satıra gidin. "Eğer x in line:" seçeneğini kullanmayı denedim, ancak bu doğru sırada olduğundan emin olmaz. Ayrıca, ilk üç harf gibi satırın yalnızca küçük bir bölümünü veya ilk üçten sonraki üç harfi nasıl alacağımı anlayamıyorum. Karakterleri tek değişkenli veya liste halinde yapmadan yapmaya çalışıyorum. Çizgiyi okuduktan sonra bu parçayı başka bir betiğe yerleştirmek için küçük bölümün bir dizge olarak kaydedilmesini tercih ederim.Varolan bir dosyadan bir satırın seçilebilir bölümlerini okuma

+0

Bir 'ayrıştırıcı' dilini yapmak mı istiyorsunuz? Bireysel belirteçlerin dizelerinin bir listesini yapmak için dize bölme kullanın. Bu bir harf listesinden farklıdır. – roadrunner66

+0

Teşekkür ederim, bunu şimdi uygulamaya çalışacağım, ne göreceğim yapabilir! – Piguinrulist

cevap

1

Normal İfadeler, ayırmadan önce sizin için bir satırın sözdizimini kontrol edebilir. Örneğin, döngü bir javascript/C tarzı ile: değişken for_loop_conditions Şimdi

import re 
if re.match("for([\w|\S]+)[{|\S]", line.strip()): 
    from_first_bracket = line.split("(")[1] 
    for_loop_conditions = from_first_bracket.split(";") 
    # last item in for_loop_conditions list has extra punctuation: 
    for_loop_conditions[2] = for_loop_conditions[2].split(")")[0] 

depolanır::

for(x=1;x<=10;x++){ //Note, some coders drop this { to the next line. 
    do_something(); 
} 

Python RE gibi bir şey olacak [x = 1 ',' x < = 10 ',' x ++ '] Çizgi, kodlayıcının yuvalamayı göstermek için kendi döngüsünün önüne koymuş olabileceği herhangi bir ilerleyen boşluktan kurtulmak için çizgilidir. 'For' ile '(') arasında boşluk bırakmadım ve son listeden beyaz boşluk çiziyorum, ama bir sonraki satırda yazmayı ve x = x + 2 ile artırmayı açıkladım.