У меня есть фрагменты текста, и я хотел бы разделить их на строки. Проблема заключается в том, что они были отформатированы и поэтому я не могу разделить, как я обычно делаю что таким образом:Как разбить текст на строки на основе выражения регулярного выражения?
_text = text.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries)
.ToArray();
Вот образец текста:
adj 1: around the middle of a scale of evaluation of physical
measures; "an orange of average size"; "intermediate
capacity"; "a plane with intermediate range"; "medium
bombers" [syn: {average}, {intermediate}]
2: (of meat) cooked until there is just a little pink meat
inside
n 1: a means or instrumentality for storing or communicating
information
2: the surrounding environment; "fish require an aqueous
medium"
3: an intervening substance through which signals can travel as
a means for communication
4: (bacteriology) a nutrient substance (solid or liquid) that
is used to cultivate micro-organisms [syn: {culture medium}]
5: an intervening substance through which something is
achieved; "the dissolving medium is called a solvent"
6: a liquid with which pigment is mixed by a painter
7: (biology) a substance in which specimens are preserved or
displayed
8: a state that is intermediate between extremes; a middle
position; "a happy medium"
Формат всегда одинаков:
- 1-3 букв слово может присутствовать
- номер 1-10
- коло n
- space
- текст, который может отображаться на нескольких строках.
Так что в этом случае разрыв строки должен быть чем-то вроде 1-3 полукокса слова с последующим номером 1-2 символа, за которым следует:
Может кто-нибудь дать мне несколько советов о том, как я мог бы сделать это с помощью раскола или с помощью другого метода?
Обновление: ответ Стивена, но не совсем уверен, как это сделать в моей функции. Здесь я показываю свой исходный код и ниже предложили ответить на этот вопрос Steven, но есть часть отсутствует, что я не уверен:
public parser(string text)
{
//_text = text.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries)
// .ToArray();
string pattern = @"(\w{1,3})?1?\d: (?<line>[^\r\n]+)(\r?\n\s+(?<line>[^\r\n]+))*";
foreach (Match m in Regex.Matches(text, pattern))
{
if (m.Success)
{
string entry = string.Join(Environment.NewLine,
m.Groups["line"].Captures.Cast<Capture>().Select(x => x.Value));
// ...
}
}
}
Для целей тестирования здесь текст в другом формате:
«среда \ n adj 1: вокруг середины шкалы оценки физических \ n мер, «оранжевый среднего размера», «промежуточная \ n емкость», «плоскость с промежуточным диапазоном», \ " средний \ n бомбардировщик \ "[syn: {average}, {intermediate}] \ n 2: (из мяса), приготовленный до появления небольшого розового мяса \ n внутри \ nn 1: средство или инструмент для хранения или передачи \ n информация \ n 2: окружающая среда; \ "рыба требует водной \ n среды \" \ n 3: inte что сигналы могут перемещаться как \ na для связи \ n 4: (бактериология) питательное вещество (твердое вещество или жидкость), которое \ n используется для культивирования микроорганизмов [син: {культуральная среда}] \ n 5: промежуточное вещество, через которое что-то достигнуто; «растворяющая среда называется растворителем \ n \ n 6: жидкость, с которой пигмент смешивается живописцем \ n 7: (биология) вещество, в котором сохранились образцы или \ n отображалось \ n 8: состояние, которое является промежуточным между крайностями; средняя \ n позиция; \ "счастливая среда \" \ n 9: кто-то, кто служит посредником между живыми и мертвыми; «он консультировался с несколькими медиумами» [син: {спиритуалист]] \ n 10: передачи, которые широко распространяются среди публики \ n [syn: {mass medium}] \ n 11: занятие, для которого вы особенно хорошо подходите ; \ "В \ п закона он обнаружил, что его истинная профессия \" [син: {профессия}] \ п [также: {СМИ} (мн)] \ п»
не чувствует, как регулярное выражение год лучше всего, сделать это трудный путь – pm100
Вы уже определили бизнес-правила. Во-вторых, не так много опыта с регулярными выражениями. Для ремонтопригодности, а также Я бы рекомендовал просто написать логику с помощью линейного анализа, чтобы проверить ваши условия. – Aphelion