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

时间:2018-02-26 20:19:38

标签: python regex parsing python-3.5

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

  

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

  1. 如何指定删除'之后的所有大写字母:'除了' LATE'
  2. 这个词
  3. 缺少什么会删除一行末尾的数字?

1 个答案:

答案 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'