Python 正则表达式。删除“:”之后的所有字符(包括行尾和特定字符串除外)

Python regex. Removing all characters after ':' (including at the end of line and except for a specific string)

我正在从日志文件中解析信息和布局数据。假设我有一些看起来像这样的行:

Book: 190 Checked Out By: ABCD-1234-E5F6, Status: LATE Return: 02.20.2018

我正在尝试删除特定于行的信息,例如数字、序列号、日期等。但是,假设 'Status: LATE' 应该保留。我想要这样的输出:

Book Checked Out By, Status: LATE Return

(这个例子是编的,结合实际数据和任务更有意义一点。)

目前我有:re.sub(':\s.*?(?=[^A-Z\d\-.])','', str)删除“:”之后的所有非大写字母、数字和“.”的字符。或“-”(它会停在其他任何地方,如空格、a-z 等)。但是我的输出保留了行中的最后一位并删除了状态。

Book Checked Out By, Status: Return: 10.20.2018

  1. 如何指定删除“:”后的所有大写字母,单词 'LATE'
  2. 除外
  3. 缺少什么也会删除行尾的数字?

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'