使用Python 3中的Regex在2个句子之间提取多行数据

时间:2018-04-13 11:16:58

标签: python regex python-3.x multiline

我有这个数据

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"""]

我需要保存在变量'日期= 10'中的10天而不是4天的约翰,玉和肯特的数据。 。任何人都可以在python 3.X中建议任何正则表达式来解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

使用新线条执行此操作有点复杂,任何角色分割都会更容易,但这就是我所得到的:

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或者它是字符串的结尾,并且如果这是真的,则阻止第二部分获得更多匹配。