0

我需要删除两个搜索词,同时保留它们之间的内容,如果可能的话,我想使用一个正则表达式。该方案如下所示:

(?<=LOOKBEHIND) SEARCH_TERM_#1 {CONTENT_TO_BE_LEFT} SEARCH_TERM_#2 {END_OF_DOCUMENT}

PS:您知道文档结尾是否有正则表达式符号,就像$行尾存在一样?

谢谢,所有的贡献将不胜感激。

PSS:实际文字如下:

</BODY></HTML><FILE CREATED ON 0:32:33 Feb 24, 2009>{several empty lines before the end of document}

删除后留下的是什么<0:32:33 Feb 24, 2009>

4

3 回答 3

1

如果您知道这两个搜索词,那么您可以简单地在捕获组中捕获其余的(应该保持不变的),然后使用如下替换字符串:

$1

所以你需要像这样修改你的正则表达式:

(?<=LOOKBEHIND) SEARCH_TERM_#1 (CONTENT_TO_BE_LEFT) SEARCH_TERM_#2 {END_OF_DOCUMENT}

关于end-of-document,实际上$是指字符串或文档的结尾,如果要匹配行尾,则必须打开一个特殊的正则表达式修饰符,通常称为多行模式。

我认为您可以使用以下表达式来做到这一点:

.*?(?<=CREATED ON )([^>]+)>.*

正则表达式 101 演示

这个例子是在 PHP 中,你需要打开点匹配换行模式,这样直到文档末尾的所有内容都被替换。

于 2013-09-13T10:31:31.170 回答
0

由于您没有提及语言,因此您可以调整以下 python 代码

>>> re.sub(r'SEARCH_TERM_1(.*?)SEARCH_TERM_2',r'\1','SEARCH_TERM_1okSEARCH_TERM_2',flags=re.MULTILINE|re.DOTALL)
    'ok'
>>> re.sub(r'SEARCH_TERM_1(.*?)SEARCH_TERM_2',r'\1','SEARCH_TERM_1okSEARCH_TERM_2   SEARCH_TERM_1okSEARCH_TERM_2',flags=re.MULTILINE|r\
    e.DOTALL)
    'ok   ok'
于 2013-09-13T10:32:11.737 回答
0

这将删除除搜索词之间的部分之外的所有内容:

Regex.Replace(input, string.Format("(.*{0})(.*)({1}.*)", search1, search2),"$2", RegexOptions.Singleline)

编辑:

完全按照您在评论中指定的操作:

var search1 = "ON ";
var search2 = ">";

var result = Regex.Replace(input, string.Format("(.*{0})(.*{1})(.*)", search1, search2), "<$2", RegexOptions.Singleline);
于 2013-09-13T10:37:10.287 回答