在python3中使用Regex提取两个句子之间的多行数据

2024-04-26 06:54:27 发布

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

我有这些数据

Date = 10

data = ["""Number of Days are 4 days : 

john: 12

jade: 452

kent: 3542

Number of Days are 10 days : 

john: 34

jade: 765

kent: 9473"""]

我需要john、jade和kent的10天数据,而不是保存在变量'Date=10'中的4天数据。有人能建议用python3.X中的正则表达式来解决这个问题吗?你知道吗


Tags: of数据numberdatadatejohndays建议
1条回答
网友
1楼 · 发布于 2024-04-26 06:54:27

用新行来做这件事有点复杂,用拆分的任何字符都会容易得多,但这就是我得到的:

import re
Date = "10"
regex = r"(?<=Number of Days are %s days : \n\n)(.+\n{0,2})+?((?=Number of Days)|(?=$))" % (Date) 
test_str = ("""Number of Days are 4 days : 

john: 12

jade: 452

kent: 3542

Number of Days are 10 days : 

john: 34

jade: 765

kent: 9473

Number of Days are 11 days : 

john: 34

jade: 765

kent: 9473""")

matches = re.search(regex, test_str)

if matches:
    print (matches.group())

我的正则表达式如下:

r"(?<=Number of Days are %s days : \n\n)(.+\n{0,2})+?((?=Number of Days)|(?=$))"

第一部分:

(?<=Number of Days are %s days : \n\n)

这看起来是否有您的搜索字符串Number of Days are %s days%s正在引用您的变量日期

第二部分:

(.+\n{0,2})+

查找结尾有0或2行新行的任何字符。你知道吗

第三部分:

?((?=Number of Days)|(?=$))

这将检查是否有任何Number of Days或者它是字符串的结尾,如果是这样的话,将阻止第二部分获得更多匹配项。你知道吗

相关问题 更多 >