根据Python中的日期解析字符串

时间:2015-06-23 20:08:55

标签: python regex string parsing date

我有一个字符串:

  

05-01-2015 12:27 - KH - (KH)Igangværende - Opringning - 13-11 00:00   FangedeRLIpå汉斯·莫米尔。 Ring igen kl。 15 19-11-2014 11:17 - KH -   (KH)Igangværende - Opringning - 13-11 00:00Gikpåsvarerigen og   lagt倾斜直到RLI在ringe倾斜。 12-11-2014 09:38 - KH - (KH)   Igangværende - Opringning - 13-11 00:00 12-11-2014 09:32 - KH - (KH)   Igangværende - Opringning - 15-10 00:00ForsøgtRLIigen og lagt   beked om han vil ringe。 14-10-2014 13:14 - KH - (KH)Igangværende -   Opringning - 15-10 00:00 14-10-2014 13:10 - KH - (KH)Igangværende -   Opringning - 14-10 00:00 Lagt besked直到RLI在14-10-2014   13:06 - KH - (KH)Igangværende - Opringning - 14-10 00:00测试

我需要将这个字符串解析成碎片,以便每个部分都以日期开头。为此,我试图从正则表达式中受益:

match = re.search(r'\d{2}-\d{2}-\d{4}', text)

但是这段代码只能找到日期。我不能再往前走了。我需要有一些如:

  

first_piece:05-01-2015 12:27 - KH - (KH)Igangværende - Opringning - 13-11 00:00 FangedeRLIpåhansmobil。 Ring igen kl。 15

     

second_piece:19-11-2014 11:17 - KH - (KH)Igangværende - Opringning - 13-11 00:00Gikpåsvarerigen og lagt besked to RLI at ringe tilbage。

等等。

你能否告诉我一些关于实现这些子字符串的见解?

提前致谢。

3 个答案:

答案 0 :(得分:5)

这有用吗?

re.split(r' (?=\d{2}-\d{2}-\d{4})', text)

答案 1 :(得分:2)

马库斯有正确的答案,但他们的答案中缺少一个有趣的小细节。

测试文件 multiple_dates.py

import re

test_string = u"05-01-2015 12:27 - KH - (KH) Igangværende - Opringning - 13-11 00:00 Fangede RLI på hans mobil. Ring igen kl. 15 19-11-2014 11:17 - KH - (KH) Igangværende - Opringning - 13-11 00:00 Gik på svarer igen og lagt besked til RLI at ringe tilbage. 12-11-2014 09:38 - KH - (KH) Igangværende - Opringning - 13-11 00:00 12-11-2014 09:32 - KH - (KH) Igangværende - Opringning - 15-10 00:00 Forsøgt RLI igen og lagt besked om han vil ringe. 14-10-2014 13:14 - KH - (KH) Igangværende - Opringning - 15-10 00:00 14-10-2014 13:10 - KH - (KH) Igangværende - Opringning - 14-10 00:00 Lagt besked til RLI at ringe 14-10-2014 13:06 - KH - (KH) Igangværende - Opringning - 14-10 00:00 test"

groups = re.split(r' (?=\d{2}-\d{2}-\d{4})', test_string)

for group in groups:
    print(group)

如果我在python2.7中运行给定的例子,我得到

 python multipe_dates.py 
  File "multipe_dates.py", line 3
SyntaxError: Non-ASCII character '\xc3' in file multipe_dates.py on line 3, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

如果我用python3运行它,它默认工作

python3 multipe_dates.py 
05-01-2015 12:27 - KH - (KH) Igangværende - Opringning - 13-11 00:00 Fangede RLI på hans mobil. Ring igen kl. 15
19-11-2014 11:17 - KH - (KH) Igangværende - Opringning - 13-11 00:00 Gik på svarer igen og lagt besked til RLI at ringe tilbage.
12-11-2014 09:38 - KH - (KH) Igangværende - Opringning - 13-11 00:00
12-11-2014 09:32 - KH - (KH) Igangværende - Opringning - 15-10 00:00 Forsøgt RLI igen og lagt besked om han vil ringe.
14-10-2014 13:14 - KH - (KH) Igangværende - Opringning - 15-10 00:00
14-10-2014 13:10 - KH - (KH) Igangværende - Opringning - 14-10 00:00 Lagt besked til RLI at ringe
14-10-2014 13:06 - KH - (KH) Igangværende - Opringning - 14-10 00:00 test

如果你添加

# -*- coding: utf-8 -*- 

到你的py文件的顶部它将在python2

中工作

答案 2 :(得分:1)

你可以使用这种模式

(\d\d-\d\d-\d{4}.*?)(?=\d\d-\d\d-\d{4}|$)

Demo