Я работаю над проектом, который требует анализа "форматирования тегов". Используя тег вроде этого: <b>text</b>
, он изменяет внешний вид текста (этот тег делает текст жирным). В одном теге может быть до 4 идентификаторов (b
для жирного шрифта, i
для курсива, u
для подчеркивания и s
для вычеркивания).
Например:
<bi>some</b> text</i> here
даст некоторый текст здесь.
Чтобы проанализировать эти теги, я пытаюсь использовать RegEx для захвата любого текста до первого открывающего тега, а затем для захвата любых тегов и включенного в них текста после этого. Прямо сейчас у меня есть это:
<(?<open>[bius]{1,4})>(?<text>.+?)</(?<close>[bius]{1,4})>
Соответствует одному тегу, приложенному тексту и одному соответствующему закрывающему тегу.
Прямо сейчас я перебираю каждый отдельный символ и пытаюсь сопоставить позицию в строке, в которой я нахожусь, до конца строки, например, Я пытаюсь сопоставить всю строку в i = 0
, подстроку с позиции 1 до конца в i = 1
и т. Д.
Однако такой подход невероятно неэффективен. Похоже, что было бы лучше сопоставить всю строку в одном RegEx, а не выполнять ручную итерацию по строке.
Мой актуальный вопрос: можно ли сопоставить строку, которая не соответствует группе, например тег? Я прогуглил это без успеха, но, возможно, я не использовал правильные слова.