将findall / finditer中的匹配转换为变量或字符串

时间:2017-03-15 19:41:47

标签: python python-2.7 findall

我有一个大文件,基本上看起来像一本日记,想要提取有关每个日期的所有信息,以便进一步处理它。

File looks like this:

Mittwoch, 13. September 2017
19:00 Uhr
20:00 Uhr
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy 
eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam
voluptua. At vero eos et accusam et justo duo dolores et ea rebum.

Mittwoch, 20. September 2017
18:00 Uhr
19:30 Uhr
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy 
eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam
voluptua. At vero eos et accusam et justo duo dolores et ea rebum.

为了实现这一点,我使用以下代码解析日期,该代码将每个日期作为一个匹配返回(我使用了findall和finditer,因为我不确定哪个更好处理)。

我现在想要将每个匹配项分配为带有数字的变量,以形成起点和终点。

这样我希望将文档拆分为单个事件。

问题是,我不知道如何将匹配作为字符串或变量分配,并且找不到任何有用的东西。

代码:

    # finditer
    matches = re.finditer((Montag|Dienstag|Mittwoch|Donnerstag|Freitag|Samstag|Sonnabend|Sonntag)(, )([123][0-9]|[1-9])(. )(Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)( )([0-2][0-9][0-9][0-9])", contents) # finds all Dates and shows them in a List (Day , Number . Month ( ) Year)

    for match in matches:
        print "{g}".format(g=match.group()) # returns dates below eachother without ''

    # findall
    matches = re.findall("(Montag|Dienstag|Mittwoch|Donnerstag|Freitag|Samstag|Sonnabend|Sonntag)(, )([123][0-9]|[1-9])(. )(Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)( )([0-2][0-9][0-9][0-9])", contents) # finds all Dates and shows them in a List (Day , Number . Month ( ) Year)

    for aTuple in matches:
        print "\n",('%r%r%r%r%r%r%r' % aTuple) # print findings after new line below eachother with ''

    for Weekday, Comma, Day, Dot, Month, Space, Year in matches:
        print "\n", Weekday, Comma, Day, Dot, Month, Space, Year

所以最后我希望有类似的东西:

Date1 =(“Mittwoch,2017年9月13日”)

Date2 =(“Mittwoch,2017年9月20日”)

这将允许在Date1和Date2之间提取所有内容。

感谢您的帮助和努力

1 个答案:

答案 0 :(得分:0)

您可以逐行处理文件。

创建一个检测单行是否包含日期的函数。找到该功能的第一个日期后,请开始收集以下行作为您的内容。

当您点击包含日期的下一行时,请处理当前的内容行列表,然后重新开始。继续,直到您到达文件末尾。

如果您的日期格式一致,您可能希望依赖日期库(例如Python的日期时间与德语本地化)来进行解析而不是正则表达式。