Я использую Excel для создания таблиц, которые включают столбец гиперссылочных ячеек. Теперь я хочу преобразовать эти данные в формат Wiki-таблицы. Если я использую tab2wiki (https://magnustools.toolforge.org/tab2wiki.php), я теряю гиперссылку. Какой инструмент доступен, чтобы перенести гиперссылку при конвертации?
решение1
Если вы знаете, как выглядит таблица в коде wiki, вы можете создать почти весь исходный код таблицы в самом Excel. Начало и конец таблицы вы добавите в исходный код wiki. Например, создание гиперссылок будет выглядеть примерно так: A1 = [[
, B1 =название целевой статьи, С1 = ]]
, Д1 = = A1&B1&C1
.
решение2
В конечном итоге, наилучшим решением будет расширение tab2wiki
инструмента поддержкой обработки ссылок (исходный кодздесь), особенно учитывая взрывной рост числа общих TLD за последние несколько лет. Ничто не сравнится с написанием специального кода для решения этой проблемы, которая сложнее, чем это ограниченное решение (подробно описанное ниже) может справиться.
Тем не менее, мне удалось кое-что с помощью регулярных выражений и Perl написать,мощьделайте то, что вам нужно, в зависимости от ваших условий, по крайней мере, если у вас есть доступ к Linux или вы можете адаптировать этот подход к другой среде. Я считаю,блокнот++, доступный в Windows, поддерживает регулярные выражения в своем инструменте поиска и замены, и вы можете адаптировать этот подход для использования этого интерфейса с приведенным ниже регулярным выражением (т. е. вставить вывод tab2wiki
в notepad++, а затем использовать регулярное выражение в его инструменте поиска и замены).
Во-первых, вводные данные, которые предоставляются tab2wiki
:
lol wut noway asdf
1 no way https://www.google.com so cool https://test.net qwer zxcv
2 http://kagi.org sd
3 fd d https://netflix.org
4 fdasf f http://www.apple.org
При вставке tab2wiki
получается следующий текст:
{| border="1" class="sortable"
!lol!!wut!!noway!!asdf
|-
|1||no way https://www.google.com so cool https://test.net||qwer||zxcv
|-
|2||||http://kagi.org||sd
|-
|3||fd||d||https://netflix.org
|-
|4||fdasf||f||http://www.apple.org
|}
В этом примере есть ячейки с несколькими ссылками, а также конечные ячейки, имеющие ссылки в самом конце, а также пустые ячейки.
Сохранив этот файл где-нибудь, а-ля /tmp/testwikifile
, а затем выполнив следующую команду с помощью perl
движка регулярных выражений , мы обойдём и приклеим [
и ]
вокруг каждой из ссылок:
cat /tmp/testtable3 | perl -p -e 's/(http.*?)\.(com|org|net)/\[\1.\2\]/gm'
Выход:
{| border="1" class="sortable"
!lol!!wut!!noway!!asdf
|-
|1||no way [https://www.google.com] so cool [https://test.net]||qwer||zxcv
|-
|2||||[http://kagi.org]||sd
|-
|3||fd||d||[https://netflix.org]
|-
|4||fdasf||f||[http://www.apple.org]
|}
Ограничения:
- Ссылки должны начинаться
http
как минимум с - Необходимо знать список доменов верхнего уровня (TLD) для ссылок.
Подробности регулярного выражения:
Это регулярное выражение 's/(http.*?)\.(com|org|net)/\[\1.\2\]/g'
можно разбить следующим образом:
- Выполнить замену входной строки новой строкой, например
s/start/replacement/
, и сделать это глобальноg
(найти все совпадения). - Найдите
http
плюс что-нибудь еще.*
и сделайте этолениво?
. Затем найдите период\.
, затем найдите один изcom
,org
, илиnet
через(com|org|net)
. Это устанавливает две группы захвата, которые мы затем можем использовать в нашей подстановке. - Замена —
\[\1.\2\]
, где\1
все отhttp
до точки, и\2
одно изcom
,org
, илиnet
. Следовательно, «поставьте точку.
между этими двумя совпадениями, чтобы переделать ссылку, и дополните ссылку открывающими[
и закрывающими]
скобками».