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
- 如何指定删除“:”后的所有大写字母,单词 'LATE'
除外
- 缺少什么也会删除行尾的数字?
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'
我正在从日志文件中解析信息和布局数据。假设我有一些看起来像这样的行:
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
- 如何指定删除“:”后的所有大写字母,单词 'LATE' 除外
- 缺少什么也会删除行尾的数字?
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'