Python在某些单词之后捕获特定数量

时间:2018-10-30 18:39:38

标签: python python-3.x

我正在尝试从这句话中捕获“ book id:”(类似于isbn,除了带有数字)。我查看了堆栈上的ISBN数字示例,并尝试了不同种类的正则表达式组合,但是我却无法将它们捕获到一个列表中。我在这里想念什么?

sentence="List of book ids that are important to read book id: A83827-121-1-23-1341-2315ad3  book id: N32-12-1-23-1341-2342  and  book id: A334121A313412342"
isbn = re.compile("(?:[0-9]{3}-)?[0-9]{1,5}-[0-9]{1,7}-[0-9]{1,6}-[0-9][A-Z]",re.IGNORECASE)

matches = []
for line in sentence:
    matches.extend(isbn.findall(line))
    print(line)

尝试捕获这样的最终输出:

['A83827-121-1-23-1341-2315ad3','N32-12-1-23-1341-2342','A334121A313412342']

1 个答案:

答案 0 :(得分:1)

请注意,您的for循环将遍历每个字符:您不需要它。

这是您可以使用的正则表达式:

isbn = re.compile(r"book id: ([\w-]+)")
print(isbn.findall(sentence))

输出:

['A83827-121-1-23-1341-2315ad3', 'N32-12-1-23-1341-2342', 'A334121A313412342']

说明:

  • [\w-]+匹配任何(非空)字母数字字符(\w)和连字符。
  • 括号表示捕获组,findall仅返回该捕获组中匹配的内容,因此不包括“ book id:”。