我正在从日志文件中解析信息和布局数据。假设我有一些看起来像这样的行:
Book:190 Checked By:ABCD-1234-E5F6,状态:LATE返回:02.20.2018
我试图删除特定于该行的信息,如数字,序列号,日期等。但是,请说“状态:晚”'应该留下。我想输出像:
Book Check Out Out,Status:LATE Return
(这个例子已经完成了。它对实际的数据和任务更有意义。)
目前我有:re.sub(':\s.*?(?=[^A-Z\d\-.])','', str)
删除'后面的所有字符:'这不是大写字母,数字和'。'或者' - ' (它停在其他任何东西,如空格,a-z等)。但是我的输出是离开行中的最后一位并删除状态。
Book Checked Out By,Status:Return:10.20.2018
答案 0 :(得分:2)
re.sub
带有负面预测,以使LATE
无法匹配:
re.sub(r':\s(?!LATE)[A-Z\d.-]+', '', str_)
:\s
匹配:
后跟一个空格
(?!LATE)
- 零宽度否定前瞻确保在以下匹配中不会出现LATE
[A-Z\d.-]+
匹配[A-Z\d.-]
示例:强>
In [41]: str_ = 'Book: 190 Checked Out By: ABCD-1234-E5F6, Status: LATE Return: 02.20.2018'
In [42]: re.sub(r':\s(?!LATE)[A-Z\d.-]+', '', str_)
Out[42]: 'Book Checked Out By, Status: LATE Return'