2013-01-10 64 views
4

我有一個文本文件text_isbn與它的負載的書號。我想寫一個腳本來解析它,並將它寫入一個新的文本文件,每個ISBN號碼都放在一個新行中。如何使用Python在文本文件中查找所有isbn?

到目前爲止,我可以寫的正則表達式查找ISBN,但無法處理任何進一步的:

import re 
list = open("text_isbn", "r") 
regex = re.compile('(?:[0-9]{3}-)?[0-9]{1,5}-[0-9]{1,7}-[0-9]{1,6}-[0-9]') 

我嘗試使用以下,但得到一個錯誤(我猜的列表不正確格式...)

parsed = regex.findall(list) 

如何解析並將其寫入新文件(output.txt)?

這裏是文字的text_isbn

Praxisguide Wissensmanagement - 978-3-540-46225-5 
Programmiersprachen - 978-3-8274-2851-6 
Effizient im Studium - 978-3-8348-8108-3 
+0

在問題主體和正則表達式中發佈一個'text_isbn'文件片段。 –

+2

您在打開的文件句柄上應用'regex.findall',而期待一個字符串。嘗試先調用'open(...).read()'。 – Tim

+1

難道你不能只分開第一個'-'的行嗎? – katrielalex

回答

5

import re 

isbn = re.compile("(?:[0-9]{3}-)?[0-9]{1,5}-[0-9]{1,7}-[0-9]{1,6}-[0-9]") 

matches = [] 

with open("text_isbn") as isbn_lines: 
    for line in isbn_lines: 
     matches.extend(isbn.findall(line)) 
+1

從這裏採取正則表達式:http://stackoverflow.com/questions/4381514/regular-expression-for-an-isbn-13 – Tim

+3

*咳嗽咳嗽*陰影輸入內置*咳嗽咳嗽* – katrielalex

+0

正則表達式是不是我的部分 –

0

如何嘗試這個表達式(從regular expression cookbook)樣本:

import re 
data = open("text_isbn", "r") 
regex = "(?:ISBN(?:-1[03])?:?)?(?=[-0-9 ]{17}$|[-0-9X ]{13}$|[0-9X]{10}$)(?:97[89][- ]?)?[0-9]{1,5}[- ]?(?:[0-9]+[- ]?){2}[0-9X]$" 

for l in data.readlines(): 
    match = re.search(regex, l) 
    isbn = match.group() 
    outfile.write('%s\n' % isbn) 

與樣本數據進行測試。假設每行僅包含一個isbn編號

+0

謝謝你的回答。它的工作原理也是如此,但我標出了第一個答案,但是你的答案很好,也很有效...... – mcbetz

相關問題