Ваш пример мне подходит.
> Line 1 > Line 2 >> Line 2.1 >> Line 2.2 > Line 3
К сожалению, чистый RegEx не может отследить, на каком уровне вложенности вы находитесь, поэтому он не будет знать, куда помещать теги / UL .
Что-то вроде этого может работать:
* Line 1 * Line 2 > * Line 2.1 * Line 2.2 < * Line 3
Здесь, больше и меньше, чем двигаться вверх и вниз по иерархии, и звездочки являются разделителями для пуль. Пробелы до и после каждого используются как своего рода escape-последовательность, поэтому вы все равно можете использовать эти символы буквально или для других целей, таких как курсив и полужирный, когда они не окружены пробелами.
Удар в RegEx:
string ol = "<ul>" & RegEx.Replace(t, " > ", "<ul>") & "</ul>";
ol = RegEx.Replace(ol, " < ", "</ul>");
ol = RegEx.Replace(ol, "( |>)\\* ([^*<>]*)", "<li>\\2</li>");
Редактировать: Настроен для создания XHTML, закрывая теги LI, на основе комментария ниже. Также исправлен мой синтаксис C #.
Окончательное редактирование: Я думаю, что \ * и \ 2 в последней замене нужно экранировать для C #, исправляя. Также обратите внимание, что первые два вызова Replace () могут использовать String.Replace (), а не RegEx, что, вероятно, будет быстрее.