У меня есть (большой) набор данных, который изначально состоит из идентификатора и связанного текста (в необработанном HTML). Часто текст будет содержать одну или несколько встроенных ссылок. Вот пример набора данных:
id text
1 <p>I love dogs!</p>
2 <p>My <strong>favorite</strong> dog is <a href="www.doge.com">this kind</a>.</p>
3 <p>I've had both <a href="labs.com">Labs</a> and <a href="http://www.huskies.com">Huskies</a> in my life.</p>
То, что я хотел бы получить в качестве результата (со столбцом text
, включенным в то же место, но я удалил его для наглядности здесь), будет:
id link1 link2
1
2 doge.com
3 labs.com huskies.com
Я пытался использовать str_extract_all()
в паре с <a\s+(?:[^>]*?\s+)?href=(["'])(.*?)\1
, но даже когда я дважды удаляю обратную косую черту, я либо получаю "неожиданную" ошибку, либо она продолжает просить меня о большем, и мне приходится сбегать. Я чувствую, что этот метод - тот, который я хочу и ДОЛЖЕН работать, но я не могу заставить регулярное выражение играть хорошо. Вот мои результаты:
> str_extract_all(text, "<a\s+(?:[^>]*?\s+)?href=(["'])(.*?)\1")
Error: '\s' is an unrecognized escape in character string starting ""<a\s"
> str_extract_all(text, perl(<a\s+(?:[^>]*?\s+)?href=(["'])(.*?)\1))
Error: unexpected '<' in "str_extract_all(text, perl(<"
> str_extract_all(text, "<a\\s+(?:[^>]*?\\s+)?href=(["'])(.*?)\\1")
+
> str_extract_all(text, perl(<a\\s+(?:[^>]*?\\s+)?href=(["'])(.*?)\\1))
Error: unexpected '<' in "str_extract_all(text, perl(<"
Я также пробовал parseURI
из пакета XML
и по какой-то причине он завершает мой сеанс R.
Другие решения, которые я нашел на сегодняшний день, либо работают только с одиночными ссылками, либо возвращают элементы в списке или в целом. Я хочу, чтобы вещи были отделены по их идентификатору и в наборе данных.
При необходимости я мог бы допустить создание отдельного набора данных и объединение их вместе, но будут случаи, когда нет ссылок, поэтому я бы хотел избежать любых ловушек удаляемых строк из-за отсутствия значения в каком-либо из столбцов link
.