如何使用 Python 在文本文件中查找所有的 ISBN?

6

我有一个文本文件text_isbn,里面有很多ISBN号码。我想编写一个脚本来解析它,并将每个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

在问题正文中发布“text_isbn”文件的片段以及您的正则表达式。 - Ashwini Chaudhary
2
您正在打开文件并应用regex.findall,但是它期望的是一个字符串。请先尝试调用open(...).read() - Tim
1
你不能只是在第一个“-”上分割这些行吗? - Katriel
好的,我也可以在第一个“-”处分割。 - mcbetz
2个回答

8
如何?
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
使用从这里获取的正则表达式:https://dev59.com/RVLTa4cB1Zd3GeqPanv_ - Tim
3
cough cough 模仿 input 内置函数 cough cough - Katriel
只有一个部分缺失:写入到新的文本文件……除此之外,它可以工作。 - mcbetz
1
你有一个列表,请自己编写 ;) - Jakob Bowyer
好的,我会尝试。但是re.compile会抛出一个错误(2.7):File "/usr/lib/python2.7/re.py", line 190, in compile return _compile(pattern, flags) File "/usr/lib/python2.7/re.py", line 242, in _compile raise error, v # invalid expression - mcbetz
显示剩余2条评论

0

尝试使用这个正则表达式(来自正则表达式菜谱):

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号码。


谢谢你的回答。它也起作用了,但我标记了第一个答案,不过你的答案也很好并且有效。 - mcbetz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接