2013-02-15 45 views
-3

我寫了一個函數來從文件中提取一個模式,但它沒有正確的工作。爲什麼?如何使用Python在文本文件中使用findall進行檢查?

我在Python代碼:

import re 

f = open('quran_final.txt','r') 
r = open('q.txt','w') 
p = re.compile('ROOT:(?P<root>[^ "]+)') 
for line in f: 
    root = p.findall(line) 
    if(root): 
     for word in root: 
     print word 
    else: 
     print ' ' 

我認爲這個問題是在「檢查」,但我應該怎麼改變呢?

我的文本文件樣本:

f:CONJ+ POS:V IMPV ROOT:Akl 2MP 
POS:LOC LEM:Hayov ROOT:Hyv 
POS:V PERF ROOT:$yA 2MP 
POS:ADJ LEM:ragad ROOT:rgd M INDEF ACC 
wa+ POS:V IMPV ROOT:dxl 2MP 
Al+ POS:N LEM:baAb ROOT:bwb M ACC 
POS:N LEM:saAjid ROOT:sjd MP INDEF ACC 
wa+ POS:V IMPV ROOT:qwl 2MP 
POS:N LEM:HiT~ap ROOT:HTT F INDEF NOM 
POS:V IMPF ROOT:gfr 1MP MOOD:JUS 
POS:N LEM:xaTiy^_#ap ROOT:xTA P ACC PRON:2MP 
wa+ sa+ POS:V IMPF ROOT:zyd 1MP 
Al+ POS:N ACT PCPL (IV) LEM:muHosin ROOT:Hsn MP ACC 
f:REM+ POS:V PERF (II) ROOT:bdl 3MS 
POS:V PERF ROOT:Zlm 3MP 
POS:N LEM:qawol ROOT:qwl M INDEF ACC 
POS:REL LEM:{l~a*iY MS 
POS:V PERF PASS ROOT:qwl 3MS 
f:REM+ POS:V PERF (IV) ROOT:nzl 1MP 
POS:REL LEM:{l~a*iY MP 
POS:V PERF ROOT:Zlm 3MP 
POS:N LEM:rijoz ROOT:rjz M INDEF ACC 
Al+ POS:N LEM:samaA^' ROOT:smw F GEN 
POS:V PERF ROOT:kwn SP:kaAn 3MP 
POS:V IMPF ROOT:fsq 3MP 
POS:V PERF (X) ROOT:sqy 3MS 
+3

在修復您的縮進第一次,並考慮張貼完整的追溯(你的錯誤信息)之後直接後。 – 2013-02-15 15:28:52

+0

我在問這個檢查是對還是錯? – 2013-02-15 15:30:14

+1

不能告訴我們 - 不能複製並粘貼到我的翻譯(無固定錯誤) - 沒有任何樣本數據選擇運行... – 2013-02-15 15:31:28

回答

1

如果我理解正確的話,你需要在你的模式

p = re.compile('ROOT:(?P<root>[^\s]+)') 
+0

哈哈。完成格式化問題的所有工作後,並要求澄清。你會得到答案。 : -/ – Hoopdady 2013-02-15 16:10:55

+0

什麼是「在正則表達式添加 – Hoopdady 2013-02-15 16:13:38

+0

Hoopdady:ididn'tget的答案,我很抱歉這 – 2013-02-15 16:15:29

-2

壓痕底線 - 需要縮進其他四個空格打印字。根應該是:

root = re.findall(p, line) 
相關問題