【发布时间】:2018-04-23 14:54:51
【问题描述】:
我有以下格式的演讲者信息列表(注意:列表来自LibriSpeech语料库):
58 | M | train-other-500 | 30.06 | George Coutts
|(管道)将行划分为:
- 演讲者ID
- 性
- 语料库的子集
- 录音分钟数
- 演讲者姓名
我想使用正则表达式在 Python 中提取此信息。到目前为止,我使用了以下正则表达式:
(?P<speaker_id>.*)\|(?P<sex>.*)\|(?P<subset>.*)\|(?P<minutes>.*)\|(?P<speaker_name>.*)(?=.*)
这几乎适用于所有情况,除非扬声器名称本身包含管道字符(至少有一个扬声器的情况)。然后正则表达式通过贪婪地匹配第一组(然后还包含性别和子集信息)以错误的方式拆分不同的组。
请参阅https://regex101.com/r/GQzWOg/2 以获取演示。
如何使正则表达式匹配最后一个管道之后的所有内容作为speaker_name 组?
我已经尝试过使用 positive lookahead 进行试验,但我真的无法理解这个......
【问题讨论】:
-
speaker_id, sex, subset, minutes, speaker_name = line.split(' | ', 4) -
此外,您应该清理数据。您的分隔符应该被转义,以便在将它们添加到您的数据时不会将它们视为分隔符(即用引号包裹字符串或用其他内容替换字符)。