Excel / XLS - фильтруйте данные (с помощью регулярного выражения) и преобразуйте их в новые ячейки (возможно с openrefine?)

У меня проблема. Я не специалист по Excel.

Я нашел несколько тем, как использовать регулярное выражение в Excel, например:

Но я не знаю, как отфильтровать несколько вещей из источника данных во вновь созданный столбец.

Пример:

Источником данных в основном является HTML-код в одной ячейке.

Я создал RegEx для сопоставления ссылок (ahref), youtube, facebook, ссылок infogr.am и прочего.

Я хочу:

Извлеките / отфильтруйте ссылки из html в новый столбец, например:

Новая колонка "Ссылки"

 <a href="url">link text</a> \n
 <a href="url">link text</a> \n

(каждая отфильтрованная ссылка новая строка в ячейке)

Необязательно: вставьте рядом с ним еще один столбец, в котором учитываются абзацы / ссылки (с учетом строк).

Затем ссылки на видео (снова по одной строке на отфильтрованные данные) + необязательный столбец подсчета.

И так далее.

Я нашел Openrefine. Что кажется очень красивым и профессиональным. Но я не знал, как это сделать там.

Работать с Excel мне не приходится, потом результаты можно будет конвертировать в * .csv - это будут данные для базы данных.

Хотя я думаю, что Excel хорош для первых шагов, поскольку является необязательной функцией подсчета абзацев.


person timmyfromspace    schedule 22.10.2018    source источник
comment
Попытка разобрать HTML с помощью Regexes ... как это сказать? очень горячая тема на StackOverflow: D (stackoverflow.com/questions/1732348/). Но в OpenRefine вы можете создать новый столбец на основе столбца, который содержит ваши HTML-ячейки, используя эту формулу GREL: forEach (value.parseHtml (). Select ('a'), e, e.join ('\ n') )   -  person Ettore Rizza    schedule 22.10.2018
comment
Большое спасибо! Да, понял про разбор HTML с помощью RegEx. Когда я создаю новый столбец на основе ссылок на столбцы и помещаю ваш код в: [error: join ожидает массив и строку] несколько раз. Я действительно не знаю почему. Может быть: понял, что это не весь html. Это просто HTML-код с: ‹div› .... ‹/div› ‹p› ‹/p› + Text, Image Src, Links и прочее. Может быть, из-за ошибки ‹html› ‹/html› отсутствуют теги? Также нужно проверить, как преобразовать мой RegEx в GREL. Но в любом случае спасибо, я подробнее рассмотрю OpenRefine. Для этого должно быть хорошо.   -  person timmyfromspace    schedule 26.10.2018
comment
Сделал ошибку в своей формуле. Не могли бы вы отредактировать свой вопрос и опубликовать пример HTML?   -  person Ettore Rizza    schedule 26.10.2018
comment
pastebin.com/xW6E1jzs Сопоставленные ссылки с этим: (? i) ‹a \ shref = \ ([^› ] +) \ ›Картинки с этим: \‹ img. + Src \ = (?: \ | \ ') (. +?) (?: \ | \') (?:. +?) \ ›И так далее . Спасибо еще раз. Я действительно застрял и думаю, что принял задание, которое на самом деле не для меня. Не могли бы дать мне совет, как сформировать регулярное выражение в GREL?   -  person timmyfromspace    schedule 26.10.2018


Ответы (1)


Чтобы создать новый столбец из HTML с каждой ссылкой в ​​одной ячейке, разделенной новой строкой:

forEach(value.parseHtml().select('a'), e, e).join('\n')

Вы должны увидеть что-то вроде этого:

введите описание изображения здесь

Или, если вам нужен только текст ссылок:

forEach(value.parseHtml().select('a'), e, e.htmlText()).join('\n')

Или, если вам нужны только URL-адреса:

forEach(value.parseHtml().select('a'), e, e.htmlAttr('href')).join('\n')

Чтобы создать новый столбец из HTML, который подсчитывает количество ссылок:

forEach(value.parseHtml().select('a'), e, e).length()

В вашем образце нет изображения или видео, поэтому я не могу показать вам, как их найти. Чтобы извлечь ссылки infogr.am:

forEach(value.parseHtml().select('iframe[src*=infogr.am]'), e, e.htmlAttr('src')).join('\n')

OpenRefine использует селекторы JSoup, которые очень похожи на селекторы CSS. Просто используйте правый селектор внутри функции .select().

person Ettore Rizza    schedule 26.10.2018
comment
Спасибо еще раз! Он отлично работает, и я думаю, что немного понимаю. Во всех случаях мне просто нужна ссылка / изображение / URL-адрес видео. Отфильтровано ‹img› .... ‹src› с этим: forEach (value.parseHtml (). Select ('img'), e, e.htmlAttr ('src')). Join ('\ n') Прекрасно работает . Количество изображений с этим: forEach (value.parseHtml (). Select ('umg'), e, e.htmlAttr ('src')). Length () Фильтр ссылок, конечно, также содержит изображение и видео, но это нормально ожидается, что счетчик ссылок будет подсчитывать все интерактивные ссылки. - person timmyfromspace; 26.10.2018
comment
В HTML выглядит так: pastebin.com/FikRy1nS My RegEx: \ ‹script id = infogram. + Src \ = (?: \ | \ ') (. +?) (?: \ | \') (?:. +?) \ ›Но это слишком много: e.infogr.am/420ff00a-fbf0-485e-849a-66479dd1c189?src=embed будет Что мне нужно. Видео: действительно сложно, потому что существует бесчисленное множество способов связать видео с Facebook или Youtube stackoverflow.com/questions/29860182/ stackoverflow .com / questions / 19377262 / regex-for-youtube-url И не на все видео есть ссылки, некоторые из них встроены. Поэтому я не могу просто выбрать из списка ссылок - person timmyfromspace; 26.10.2018