我必须在 python 中使用正则表达式解析日志 txt 文件。这是一个 txt 示例(名为 file):
20/01/18, 08:11 - Peter: Good morning
How are you?
Peter 20/01/18, 09:00 - Caroline: I am fine thanks. You?
20/01/18, 09:01 - Peter: Good
I had some problems few days ago.
Now I am happy
Are you working?
20/01/18, 09:02 - Caroline: No I have to go to the supermarket to buy vegetables
20/01/18, 09:12 - Peter: Nice!
Where are you now?
我试图用这个正则表达式解析整个文本:
f = open(file, 'r', encoding='utf-8')
texts=re.findall('(\d+/\d+/\d+, \d+:\d+\d+) - (.+?): (.*)',f.read())
f.close()
df= pd.DataFrame(texts,columns=['data','name','text'])
但是,我在 python 中匹配一个或多个换行符时遇到问题(例如 Peter 在 09:01 的文本)。我也尝试着手 https://regex101.com/寻找可能的解决方案,但我没有成功。
你能帮帮我吗?
请您参考如下方法:
如果您想匹配以下文本直到新行开头的下一个日期,您可以使用否定先行匹配所有不以类似日期模式开始的行:
(\d+/\d+/\d+, \d+:\d+\d+) - (.+?): (.*(?:\r?\n(?!\d+/\d+/\d).*)*)
关于最后一部分 (.*(?:\r?\n(?!\d+/\d+/\d).*)*)
(捕获组 3.*匹配除换行符之外的任何字符 0 次以上(?:非捕获组\r?\n匹配新行(?!\d+/\d+/\d).*断言右边的不是类似日期的格式
)*关闭非捕获组并重复0+次
)关闭群组
