Я довольно плохо знаком с регулярными выражениями, искал и несколько часов пытался найти решение следующей проблемы.
У меня есть такая строка:
|Text1|Text2|Text3\n|Text4|Text5|Text6\nSomething else\n|Text6|Text8|Text9\n
Есть несколько «строк» текста (где строки означают символы новой строки), некоторые из них начинаются с |
(и, возможно, включая другие каналы).
Мне нужно регулярное выражение для C # RegEx
, которое предоставляет следующие группы:
Group1:
|Text1|Text2|Text3\n|Text4|Text5|Text6\n
Group2:
|Text6|Text8|Text9\n
Другими словами: для каждой строки, начинающейся с |
, мне нужна вся строка. Если есть несколько последовательных строк, начинающихся с |
, мне нужны эти строки вместе в одной группе.
Как и просили здесь несколько дополнительных примеров:
Пример 1
Следующий ввод
Text1|Text2\n
не должен возвращать совпадения, так как нет строки, начинающейся с |
Пример 2
Следующий ввод
|Text1|Text2
не должен возвращать совпадения, поскольку нет строки, заканчивающейся на \n
Пример 3
Следующий ввод
sometext\n|Text1|Text2\nsometext
должен вернуть 1 группу
|Text1|Text2\n
потому что строка начинается с |
и заканчивается \n
Пример 4
Следующий ввод
sometext\n|someothertext\nsometext\n|someothertext\n
должно вернуть 2 группы
|someothertext\n
и
|someothertext\n
потому что эти две строки начинаются с |
и заканчиваются \n
Пример 5
Следующий ввод
sometext\n|someothertext\n|sometext\n|someothertext\n
должен вернуть 1 группу
|someothertext\n|sometext\n|someothertext\n
потому что все три строки начинаются с |
и заканчиваются \n
, и они являются последовательными.
Я обнаружил, что следующий RegEx соответствует одной строке, начинающейся с |
и заканчивающейся \n
:
(?s)(\\n\|)((.*?)\\n)
но он не распознает последовательные строки. Я знаю, что мне как-то нужно использовать обратную ссылку \1
, но я пока не получил ее.
Чтобы уточнить : моя реальная задача - улучшить
следующая разметка для библиотеки WPF https://github.com/theunrepentantgeek/Markdown.XAML, чтобы она поддерживала синтаксис таблицы.
Поскольку разметка для WPF-библиотеки основана на наборе выражений RegEx, используемых в IEnumerable-pipe, я хотел остаться в этом шаблоне и просто добавить часть, необходимую для таблиц.
Таблица в уценке описывается несколькими строками, начинающимися с трубы, где каждый столбец таблицы разделен трубой. Последовательные строки, начинающиеся с трубы, принадлежат одной таблице. Содержимое каждого «столбца» (которое представляет собой значение между двумя каналами в строке) может быть любым текстом или даже другим выражением-разметкой.
Синтаксис таблицы для уценки описан здесь https://www.tablesgenerator.com/markdown_tables.