我正在学习正则表达式,我想从文件中提取所有记录。该文件包含多个id-<'sequence of multiline special characters, digits and alphabets'>
形式的记录。
我写了以下正则表达式,它返回除最后一条记录之外的所有内容。我知道问题是最后一条记录没有拖尾id-
,因为它遇到了eof。
解决此问题的最有效方法是什么?
with open(filename, 'r+') as f:
data = mmap.mmap(f.fileno(), 0)
for result in re.findall('id-(.*?)id-', data, re.S):
print result
编辑:每条记录还有一个父ID字段:
id-c0nv*&*parentid-t1_cwi2*&*auth-author*&*body-something something.
答案:re.findall(r'(?si)\ bid - (。*?)(?:\ bid- | $)',data,overlapped = True) 我使用了正则表达式模块,因为我想要重叠匹配。
答案 0 :(得分:2)
另一种选择可能是积极的看法。 我们的文件内容是
dsafdsfid-<'sequence of multiline special characters, digits and alphabets'>id-
sadddid-sdlkllkd 87 id-dfdssdfdsf
alksdlid-lklasdl
正则表达式
(?<=id-)(.*?)(?=id-|$)
正则表达式的解释
capture all between id- and id- or string end
尝试以下
import re
mtches = re.findall(r'(?<=id-)(.*?)(?=id-|$)',open(r"C:\Users\Winrock\Desktop\ids.txt",'rb').read())
print mtches
打印
["<'sequence of multiline special characters, digits and alphabets'>", 'sdlkllkd 87 ', 'lklasdl']
答案 1 :(得分:1)
您可以修改正则表达式以查找子模式或字符串的结尾:
id-(.*?)(?:id-|$)