将匹配项从findall/finditer转换为变量或字符串

2024-06-28 14:32:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大文件,基本上看起来像一个日记,并希望提取有关每个日期的所有信息,以进一步处理它。你知道吗

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

所以最后我想要的是:

日期1=(“Mittwoch,13。2017年9月)

日期2=(“Mittwoch,20。2017年9月)

这将允许提取Date1和Date2之间的所有内容。你知道吗

谢谢你的帮助和努力


Tags: 代码inyearsedetprintmatchesday
1条回答
网友
1楼 · 发布于 2024-06-28 14:32:52

你可以一行一行地处理你的文件。你知道吗

创建一个函数,用于检测单行是否包含日期。在你用这个函数找到你的第一个约会对象之后,开始收集以下几行作为你的内容。你知道吗

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

如果您的日期格式一致,您可能希望依赖于日期库(例如Python的datetime和德语本地化)来进行解析,而不是使用正则表达式。你知道吗

相关问题 更多 >