2015-02-25 3 views
-1

У меня есть текст, который выглядит следующим образом:Regex разбить большой текст

HEADING 

Some random text which is not capitalized. Heading are always in their own line and capitalized. 

HEADINGHHHH 
Some other random text. 

Я хотел бы разделить этот текст на две части:

1.part: 
HEADING 

Some random text which is not capitalized. Heading are always in their own line and capitalized. 

И

2.part : HEADINGHHHH 
Some other random text. 

Так в основном , Я хотел бы «разделить» заглавные заголовки, и каждый объект должен содержать заголовок с текстом под ним, до следующего заголовка.

Я попытался

(([A-Z]+\\s?)+)$ 

, но это не работает.

+1

Что вас останавливает? – Biffen

+0

Я не могу понять, как это сделать, Iam new для regex .. – n32303

+0

На каком языке/движке вы используете? – Biffen

ответ

1

Следующая works:

/\G([A-Z]+\n+[\s\S]*?(?=\n+[A-Z]+\n|$))\n*/g 

Т.е. «Заголовок» и все, что следует за ним (без жадности), пока не появится новый «заголовок».

Обратите внимание, что это глобальный матч, а не split(). Обратите также внимание на то, что он использует внешний вид, поэтому в зависимости от того, какой движок вы используете, он должен будет поддерживать это.

Это что-то вроде взлома, поэтому, если вы можете использовать синтаксический анализатор на основе строк, возможно, в сочетании с регулярным выражением, я бы порекомендовал это.


Альтернативой является использование split(), который может спасти разделители (я знаю, что баллончик Perl, и IIRC так может в JavaScript).

в Perl например:

split /^([A-Z]+)$/m, $text; 

Это, однако, поставить заголовок в любой другой элемент в списке, а их содержание в других элементах.

Еще одна альтернатива заключается в разделении с помощью внешнего вида, например. /^(?=[A-Z]+$)/m.

+0

Как использовать это в ruby ​​или C#? – n32303

+0

@NejcLovrencic Боюсь, я понятия не имею, извините. Я никогда не использовал ни одного из них. – Biffen

Смежные вопросы