【发布时间】:2020-10-07 17:27:00
【问题描述】:
我有一个文本文件,如果这两个字符串之间存在子字符串,我想提取两个字符串之间的文本。文本文件中可能有多个这样的实例。例如,
示例文本文件(text_data):
ghsauaigyssts twh
ghguy hja StartString I want this text (1) if substring 1 lies in between the two strings EndString bhghk [jhbn] xxzh StartString I want this text (2) as a different variable if substring 2 lies in between the two strings EndString ghjyjgu
输出:
first_variable = 如果子字符串 1 位于两个字符串之间,我想要此文本 (1)
second_variable = 如果子字符串 2 位于两个字符串之间,我希望此文本 (2) 作为不同的变量
我尝试将第一个变量提取为:
target1 = 'StartString'
target2 = 'substring 1'
target3 = 'EndString'
pat1 = '{}(.+?){}(.+?){}'.format(target1,target2,target3)
pattern = re.compile(pat1, flags=re.DOTALL)
first_variable = pattern.findall(text_data)
谁能帮助我了解问题所在/为此提供解决方案?谢谢
【问题讨论】:
-
这看起来是个逻辑问题,你不是要使用
pat1 = '{}(.+?){}(.+?){}'.format(target1,target3,target2)吗?但是,这是一个错误的模式,你需要pat1 = '{0}((?:(?!{0}).)+?){1}(.+?){2}'.format(target1,target3,target2) -
谢谢,我已编辑问题以更正它。您提供的解决方案也不起作用。我试图理解它。有什么学习python Regex的学习资料推荐吗?
-
见ideone.com/mYKuXh,什么不起作用?
-
输出文本中缺少 'substring 1'。我对其进行了修改以使用其中包含 900K 行的实际文本文件,但它不起作用。我认为我做错了什么,我需要弄清楚
-
试试
pat1 = '{0}\s*((?:(?!{0}).)*?{1}.*?)\s*{2}'.format(target1,target2,target3),见ideone.com/fX4zhK