在 Python 3 中使用正则表达式在 2 个句子之间提取多行数据
Extract Multiline Data between 2 sentences using Regex in Python 3
我有这个数据
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 天数据。谁能建议 python 3.X 中的任何正则表达式公式来解决这个问题?
用新行做这个有点复杂,用任何字符拆分会容易得多,但这就是我得到的:
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
正在引用您的变量 Date
第二部分:
(.+\n{0,2})+
查找末尾有 0 或 2 个新行的任何字符。
第三部分:
?((?=Number of Days)|(?=$))
这会查看是否有任何 Number of Days
或者它是字符串的末尾,如果是,则阻止第二部分获得更多匹配项。
我有这个数据
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 天数据。谁能建议 python 3.X 中的任何正则表达式公式来解决这个问题?
用新行做这个有点复杂,用任何字符拆分会容易得多,但这就是我得到的:
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
正在引用您的变量 Date
第二部分:
(.+\n{0,2})+
查找末尾有 0 或 2 个新行的任何字符。
第三部分:
?((?=Number of Days)|(?=$))
这会查看是否有任何 Number of Days
或者它是字符串的末尾,如果是,则阻止第二部分获得更多匹配项。