2012-05-16 44 views
-3

我必須逐行讀取文本文件,並提取每行的一部分。如果我正在閱讀的文章的格式是預期的格式,我有一個工作代碼,但情況並非總是如此。文件中有錯誤,即一些缺少的信息或字符。所以我想跳過這些錯誤的路線。爲此,我想利用regular expression模塊。我定義了我需要的正則表達式。可以說,reg_exp_string將與我讀的行相匹配。我想要一個完整的匹配,我不想搜索文本的某些部分。如果完全匹配返回true,否則返回false。想的是,我試過re.match(),它返回一個對象。我無法弄清楚。什麼是使用它的正確方法?如果字符串的某些部分與正則表達式匹配,它總是返回一個對象。我只想要一個完整的匹配並得到一個布爾值的答案。我怎樣才能做到這一點?python正則表達式模塊

+0

正則表達式教程/如何到http://docs.python.org/howto/regex.html – Levon

+4

有你閱讀文檔? http://docs.python.org/library/re.html – Riking

+2

這個問題完全沒有顯示OP的研究工作。 http://meta.stackexchange.com/a/128553 –

回答

1

正如documentation提到,$一個字符串的結尾相匹配。你可以修改你的正則表達式在最後包含$。例如:

match_this = "abc12a" #expression you would like to match 
dont_match_this = "abc12a9" #expression that returns partial matches from re.match 

舊的正則表達式匹配都match_thisdont_match_this

old_reg_expr = "[a-z]+\d[a-z]+" 

新的正則表達式中包含$如果字符串表達式匹配的最後一個元素結束後只返回匹配:

new_reg_expr = "[a-z]+\d[a-z]+$" 

另外,你可以讓你的舊正則表達式保持完整,只是切看CK,如果本場比賽的結束位置等於字符串的結尾:

>>> m = re.match("[a-z]+\d[a-z]+", "abc12a9") 
>>> m.end() == m.endpos 
False 
-1

如圖http://docs.python.org/library/re.html記載,匹配()將返回一個MatchObject是找到一個匹配,否則無。

所以,簡單地說:

for line in ... : 
    m = your_regexp.match(line) 
    if m: 
     process(line) 
+0

如果它在開頭匹配,它會返回一個對象,但是,我需要的是全文匹配。 –

+1

@gokhan_ufl:你可以檢查'match.end()== match.endpos'是否確保匹配整個字符串。 –

+0

謝謝。這是我正在尋找的。其實答案比「閱讀本文」短。這真的很有幫助。我猜這是關鍵因素。幫助他人。 –