Сопоставлять строки между конкретными тегами и конвертировать в викилинки - PullRequest
1 голос
/ 25 сентября 2019

Этот вопрос похож на другой вопрос, который я задал здесь: Совпадение строк между символами-разделителями , но я не смог изменить его, чтобы выполнить новое задание.(Решение должно работать с EmEditor или Notepad ++)

Мне нужно сопоставить текст между определенными тегами, т.е. <b class="b2">I have a lot of text, more text, some more text, text</b>, а затем

  1. Преобразовать только первый символ послеоткрывающий тег в нижний регистр (за исключением местоимения «I»)
  2. Преобразование содержимого между запятыми в вики-ссылки (и удаление тега).

Я попытался запустить несколькорегулярные выражения, чтобы приблизиться к этому с помощью нескольких шагов, например

(<b class="b2">)(.)
[[\L\2

</b>
]]

(\[\[)(\w+), (\w+)(\]\])
\1\2]], [[\3\4

Вводимый текст:

Any text <b class="b2">I make laugh</b>: Ar. and P. γέλωτα. Some more text <b class="b2">Delight</b>: P. and V. [[τέρπω]].
Any text <b class="b2">I amuse oneself, pass the time</b>: P. διάγειν.
Any text <b class="b2">It amuses oneself with, pass the time over, amuse</b>: Ar. and P.

Ожидаемый результат:

Any text [[I make laugh]]: Ar. and P. γέλωτα. Some more text [[delight]]: P. and V. [[τέρπω]].
Any text [[I amuse oneself]], [[pass the time]]: P. διάγειν.
Any text [[it amuses oneself with]], [[pass the time over]], [[amuse]]: Ar. and P.

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

Это одношаговое решение:

  • Ctrl + H
  • Найти что: (?:<b class="b2">|\G(, (?=.*</b>)))(I )?([^,<]+)(?:</b>)?
  • Заменить на: $1[[$2\l$3]]
  • check Обернуть вокруг
  • check Регулярное выражение
  • UNCHECK . matches newline
  • Заменить все

Объяснение:

(?:                 # non capture group
    <b class="b2">  # literally
  |                 # OR
    \G              # restart from last match position
    (               # group 1, a comma and a space
      ,             # a comma and a space
    (?=.*</b>)      # positive look ahead, make sure we have a closing tag after
    )               # end group 1
)                   # end group
(I )?               # group 2, UPPER I and a space, optional
([^,<]+)            # group 3, 1 or more any character that is not comma or less than
(?:</b>)?           # optional end tag

Замена:

$1          # content og group 1 (i.e. comma & space)
[[          # double openning square bracket
$2          # content of group 2, (i.e. "I ")
\l$3        # lowercase the first letter of group 3 (i.e. all character until comma or end tag)
]]          # double closing square bracket

Результат для данного примера:

Any text [[I make laugh]]: Ar. and P. γέλωτα. Some more text [[delight]]: P. and V. [[τέρπω]].
Any text [[I amuse oneself]], [[pass the time]]: P. διάγειν.
Any text [[it amuses oneself with]], [[pass the time over]], [[amuse]]: Ar. and P.
[[be at ease]], v.: P. and V. ἡσυχάζειν, V. ἡσύχως ἔχειν.

Снимок экрана:

enter image description here

0 голосов
/ 25 сентября 2019

Вы должны сделать это в несколько шагов.


Заменить

<b class="b2">([^<]*)</b>

на

[[\1]]

Преобразует <b> теги в вики-ссылки.


Заменить

(\[\[[^,\[\]]*?)(\s*),(\s*)

на

\1]], [[

Токенизация текста на вики-ссылки.Однако может потребоваться выполнить несколько раз, чтобы заменить все запятые.См. здесь .


Заменить

\[\[([A-Z])

на

[[\l\1

Убедитесь, что в АЭС выбран«Match case».

Преобразует все заглавные буквы после [[ в строчные.


Замените

\[\[i(\s)

на

[[I\1

преобразование для восстановления местоимений в начале в верхнем регистре.

...