ASP и IIS, в частности, поддерживают фильтры ISAPI, однако я не хотел или должен был прибегать к нему. Сегмент HTML - это только строка, а не часть дерева DOM (хотя я мог бы преобразовать его в один, если это необходимо).
В конечном счете, вот как я решил проблему, так как прямое регулярное выражение, очевидно, не может делать то, что я хочу:
RE3.Pattern = "<td[^>]*><p>.+?<\/p><\/td>"
Set Matches = RE3.Execute(it)
If Matches.Count > 0 Then
RE3.Pattern = "<p[^>]*>"
For Each Match In Matches
itxt_tmp = Replace(Replace(RE3.Replace(Match.Value,""),"</p>","<br />"),"<br /></td>","</td>")
it = Replace(it,Match.Value,itxt_tmp)
Next
End If
Set Matches = Nothing
И чтобы вернуться к оригиналу:
RE.Pattern = "<td[^>]*>.+?<\/td>"
Set Matches = RE.Execute(itxt)
If Matches.Count > 0 Then
For Each Match In Matches
If InStr(1,Match.Value,"<br />") > 1 Then
RE.Pattern = "<td([^>]*)>"
itxt_tmp = RE.Replace(Replace(Replace(Match.Value,"<br />","</p><p>"),"</td>","</p></td>"),"<td$1><p>")
itxt = Replace(itxt,Match.Value,itxt_tmp)
End If
Next
End If
Set Matches = Nothing
Вероятно, не самый быстрый и не лучший способ, но он делает свою работу. Помогает ли это кому-то другому с подобной проблемой, я не знаю, но решил, что в любом случае я бы выбросил этот сегмент кода на всякий случай.