Я бы сделал это с помощью регулярного выражения, да.Итак, вы хотите найти значение внутри тега привязки, окружающего тег img в начале ячейки таблицы?
Вот код C # для создания Regex объекта, который будет соответствовать таким ссылкам,затем используйте его, где document
- это строка, содержащая весь документ для поиска:
Regex linkscraper = new Regex(@"<\s*td[^>]*>\s*<\s*a[^>]*href\s*=\s*""(?<link>[^""]*)""[^>]>\s*<\s*img[^>]*>\s*<\s*\/a\s*>");
MatchCollection links = linkscraper.matches(document);
Соответствующие ссылки находятся в Соответствующих объектах в коллекции Links с именем группы "link".
Ведущий @ превращает это в необработанную строку: все \ передаются напрямую, а не обрабатываются, поэтому мы не обязаны удваивать их, чтобы разрешить регулярное выражение \ поведение.Поскольку кавычки нельзя экранировать с помощью \ "в необработанной строке, они экранируются с помощью" ".
Это довольно сложное регулярное выражение. Разбиваем его на части:
- Он забрызган кучей
\s*
элементов, что примерно означает «любой пробел или ни одного». Это заставляет ваше выражение linkscraper игнорировать изменения в интервале, разрешенные HTML. - Класс
[^>]
соответствует любому символу, который не является'> "; повторение этого (завершающий *) представляет собой" другие вещи внутри тега, которые нас не интересуют ". Исключение состоит в том, чтобы запретить регулярному выражению выходить из строя и выходить за пределы тега. Регулярные выражения являются жаднымитак что он будет весело совпадать с первой частью первого тега в документе, продолженной вплоть до конца последнего, если мы этого не сделаем. - С учетом всех этих объяснений все относительно просточтобы понять:
- тег TD (который может иметь или не иметь пробелы или атрибуты), за которым сразу же следует (для определения «немедленно», чемt допускает произвольные пробелы)
- a Тег, в котором href записывается в группу захвата с именем «link».
[^""]
, который является экранированной формой [^"]
, соответствует всем символам без кавычек.Нас не волнует остальная часть тега. - Тег img, который может содержать все, что он хочет.
- Закрывающий тег /.
Если вы знаете больше о точном форматировании документа, из которого вы пытаетесь извлечь ссылки, вы можете сократить это регулярное выражение.В частности, группы [^>]*
, блоки «соответствовать нулю или более символов, которые не являются>», используемые для того, чтобы теги могли содержать все, что они хотят, вероятно, должны быть заменены подвыражениями, более специфичными для фактического документа.Это поймает что-нибудь в форме <TD><A href=...><IMG></a>
, которая может соответствовать или не соответствовать больше, чем вы хотите.