如果你使用这个:
(\(\d+,\d+,'<p>.*?)(</p>)?('\),)
您将获得对以下部分的反向引用:
(1,1,'<p>Radiotherapy uses a beam of high-energy rays (or particles) lymph nodes.
<-- 即序言和正文,包括开始的 P 标签
</p>
<-- 可选的结束 P 标记.. 即您可能无法匹配 2。
'),
<-- 结束引号和括号,以及尾随逗号
然后,您可以将其替换为:
$1</p>$3
(例如使用 .NET 样式的反向引用)。
即,使用每个反向引用重建字符串,并使用显式关闭 P 标记,无论是否找到一个标记。
在不了解您的平台的情况下,我无法为此提供正确的正则表达式替换语法。
在 .NET 中它将是:
string input = @"INSERT INTO `help` VALUES
(1,1,'<p>Radiotherapy uses a beam of high-energy rays (or particles) lymph nodes.</p>'),
(2,1,'<p>EBRT delivers radiation from a machine outside the body. '),
(3,1,'<p>Following lumpectomy radiotherapy <ul><li>Heading</li></ul></p>'),";
Regex r = new Regex(@"(\(\d+,\d+,'<p>.*?)(</p>)?('\),)");
string output = r.Replace(input, "$1</p>$3");
Console.Write(output);
产生这个输出:
INSERT INTO `help` VALUES
(1,1,'<p>Radiotherapy uses a beam of high-energy rays (or particles) lymph nodes.</p>'),
(2,1,'<p>EBRT delivers radiation from a machine outside the body. </p>'),
(3,1,'<p>Following lumpectomy radiotherapy <ul><li>Heading</li></ul></p>'),