Анализ HTML с помощью регулярных выражений подобен 10-му кругу ада. Я не шучу. Вы бы лучше tidy
запустили его (не уверен, что в .NET есть приборка), а затем запустили его через анализатор XML. Таким образом, вы можете извлечь определенные атрибуты, такие как class
и lang
, а затем добавить новый атрибут с именем onDblClick
в ваш узел span
.
В противном случае, наивный подход (не уверен, что синтаксис в .NET, но это в Perl):
$str =~ s/<span\(.*?\)lang=\\"\(.*?\)\\">/<span$1lang=\\"$2\\" onDblClick=\\"window.external.MyFunction($2)\\">/
Здесь важен шаблон для сопоставления (включая снимки):
<span\(.*\)lang=\\"\(.*?\)\\">
Это соответствует <span
, за которым следует что угодно, затем lang=\"
с любым значением между \"
s, за которым следует \">
.
Шаблон замены:
<span$1lang=\\"$2\\" onDblClick=\\"window.external.MyFunction($2)\\">
Это создает <span
, за которым следует все, что соответствует, вплоть до lang
($1
), а затем lang=\"
, за которым следует захваченное имя языка ($2
), а затем onDblClick
.
Я не знаком с .NET, поэтому вам придется преобразовать это. Но это не должно быть слишком по-другому. Возможно, вам придется изменить \(
на (
(в зависимости от синтаксиса). Также я не уверен, как .NET обрабатывает обратные ссылки, но это должны быть $1
и $2
(как в Java).
Примечание: я НЕ проверял это!