使用正则表达式从文本中提取每个段

时间:2015-01-22 15:40:37

标签: python regex

我有这个文字行:

01102574 04 n 02 republication 0 republishing 0 003 @ 01101958 n 0000 ! 01746163 v 0201 + 01746163 v 0101 ! 01758710 v 0541 + 00967643 v 0201

我需要在问号之后提取前8个数字和每个段:

01102574! 01746163 v 0201! 01758710 v 0541

我在python中使用这个正则表达式:

pattern = re.compile(r"""
    ^([0-9]{8})(.*?)\ !\ (([0-9]{8}\ [a-z]{1}\ [0-9]{4}))
    """, re.VERBOSE | re.MULTILINE)
    for match in pattern.finditer(text_in):
output = "%s %s\n" % (match.group(1, 3))

我的问题是我只能在问号之后获得第一段而不是其他段。如何将正则表达式与所有段相匹配。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以使用:

import re

text_in = "01102574 04 n 02 republication 0 republishing 0 003 @ 01101958 n 0000 ! 01746163 v 0201 + 01746163 v 0101 ! 01758710 v 0541 + 00967643 v 0201";

pattern = re.compile("((^[0-9]{8})|(! [0-9]+ [a-z] [0-9]{4}))")

for match in pattern.findall(text_in):
    print match[0]

输出:

01102574
! 01746163 v 0201
! 01758710 v 0541