Regex 需要使用正则表达式查找两个字符串,它们之间有多行文本,并插入替换文本

Regex 需要使用正则表达式查找两个字符串,它们之间有多行文本,并插入替换文本,regex,python-2.7,replace,Regex,Python 2.7,Replace,我需要在一个大的html文件中多次执行正则表达式查找和替换 要查找的第一个字符串如下所示: (?-i)(<p class=.+\r\n.+)([\d]{2}/[\d]{2}/[\d]{4})(((.+\r\n)+?)(.+>))(MIR) (?-i)()(MIR) 要查找的第二个字符串是下一次出现的: 《泰晤士报-新罗马报》>和平号 我的目标是将日期组([\d]{2}/[\d]{2}/[\d]{4})插入第二个字符串,就在“MIR”之前 我的尝试没有成功 我找到的搜索字符串是:

我需要在一个大的html文件中多次执行正则表达式查找和替换

要查找的第一个字符串如下所示:

(?-i)(<p class=.+\r\n.+)([\d]{2}/[\d]{2}/[\d]{4})(((.+\r\n)+?)(.+>))(MIR)
(?-i)(

)(MIR)

要查找的第二个字符串是下一次出现的:

《泰晤士报-新罗马报》>和平号

我的目标是将日期组([\d]{2}/[\d]{2}/[\d]{4})插入第二个字符串,就在“MIR”之前

我的尝试没有成功

我找到的搜索字符串是:

(?-i)()(MIR)((.+\r\n)+?)((.+)?>)(MIR)

我想到的替换字符串是:

\1\2\3\7\8\10\2
\12

它不起作用

我需要在html文件中执行许多这样的查找和替换操作

如果你能给我任何帮助,我将不胜感激


Marc

尝试以下模式:

(<p class=.+\n.+)([\d]{2}/[\d]{2}/[\d]{4})(?:((.+\n)+?)(.+>))(MIR)

)(MIR)

和替代

\1\2\3\4\5\2< br />\6
\1\2\3\4\5\2
\6
示例代码:

import re
regex = r"(<p class=.+\n.+)([\d]{2}/[\d]{2}/[\d]{4})(?:((.+\n)+?)(.+>))(MIR)"
subst = "\\1\\2\\3\\4\\5\\2< br />\\6"

# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, subst, test_str, 0)

if result:
    print (result)
重新导入
regex=r“(

)(MIR)” subst=“\\1\\2\\3\\4\\5\\2
\\6” #您可以通过更改第4个参数手动指定替换的数量 结果=re.sub(regex,subst,test_str,0) 如果结果为: 打印(结果)


联机。

无需将
\d
装入
[]
中,除非您向字符类中添加了其他您可能需要匹配的内容。默认情况下,不区分大小写。您不需要
(?-i)
。这相当令人困惑。“要查找的第一个字符串如下”:实际的源字符串在哪里?请提供一个输入字符串和所需结果(以及您尝试的模式)的最小示例。很抱歉以令人困惑的方式发布我的问题。我在这个url上发布了一个最小的文本文件:我在我的原始帖子中输入了错误的搜索字符串。我使用的搜索字符串如下:(?-I)(

)(MIR)((.+\r\n)+?)((.+)?>)(MIR)原始模式只有7个匹配组。我已经删除了与非捕获组重叠的一个。STRING#1:

05/13/2016

MIR STRING#2=许多行HTML代码,其中没有出现STRING#1。字符串#3等于引号中的字符:“>MIR”目标:将字符串#1中的日期(2016年5月13日)捕获到一个组中,并将日期插入字符串#3中>符号和MIR之间,如下所示:>2016年5月13日亲爱的wp78de,您1分钟前的评论出现在我发表评论时,这是不可理解的,因为线路馈线被移除了。我会在几分钟内把它作为一个文件发布,也就是说,我会尽快完成。我在这个url上传了一个PDF文件(回复了wp78de的帖子):我在这个url上传了同一个文件的.txt版本(回复了wp78de的帖子):