【问题标题】:Parsing String according to Dates in Python根据 Python 中的日期解析字符串
【发布时间】:2015-09-09 19:52:06
【问题描述】:

我有一个字符串:

05-01-2015 12:27 - KH - (KH) Igangværende - Opringning - 13-11 00:00 Fangede RLI på hans mobil。环 igen kl。 15 19-11-2014 11:17-KH- (KH) Igangværende - Opringning - 13-11 00:00 Gik på svarer igen og 在 ringe tilbage 延迟到 RLI。 2014 年 12 月 11 日 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 请求 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 测试

我需要将此字符串解析为多个片段,以便每个片段都以日期开头。为此,我尝试从正则表达式中受益,例如:

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 Fanede RLI på hans mobil。环 igen kl。 15

second_piece: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。

等等。

您能否给我一些关于实现这些子字符串的见解?

提前致谢。

【问题讨论】:

  • parsedatetime.Calendar().nlp(text) 在这种情况下失败。

标签: python regex string parsing date


【解决方案1】:

这行得通吗?

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

【讨论】:

  • 谢谢马库斯。太好了
  • 当我使用 xlrd 或其他方法从 excel 单元格中获取文本时,我无法解析文本。它是一个整体。它会导致什么?我什至尝试过编码/解码的东西。我的意思是,在上述情况下, match[0] 给出了整个文本,而 match[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 中工作

【讨论】:

  • 是的。当 Idle 建议添加它时,我编辑了我的代码。谢谢。
【解决方案3】:

你可以使用这个模式

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

Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 2019-08-26
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多