Вы можете захватить первые 13 строк в группе 1, используя повторяющуюся группу без захвата и квантификатор.
Затем сопоставьте строку 14 и захват во второй группе захвата, сопоставив строки 15 и 16, используя тот же механизм, что и для первой группы.
Затем сопоставьте свой шаблон в строке 17.
\A((?:.*\R){13}).*((?:\R.*){2})\R.*ArticleConnectionStringSQL" val="Provider=SQLOLEDB\.1.*
По частям
\A
Начало строки (
Захват группа 1 (?:.*\R){13}
Соответствует первым 13 строкам, где \R
соответствует последовательности новой строки Unicode
)
Закрыть группу .*
Соответствовать строке 14 (
Захват группа 2 (?:\R.*){2}
Соответствие строки 15 и 16
)
Закрыть группу \R.*ArticleConnectionStringSQL" val="Provider=SQLOLEDB\.1.*
Сопоставьте строку 17 с вашей строкой
Regex demo
В качестве замены используйте 2 группы захвата с вашими значениями замены.
$1<P id="ArticleConnectionType" val="SQL" />$2\n<P id="ArticleConnectionStringSQL" val="Data Source=sv-it-db-6;Initial Catalog=20200526_WSCAD_IPP;Integrated Security=True" />