Как я могу добавить возврат каретки в тексте с помощью регулярных выражений? - PullRequest
1 голос
/ 02 ноября 2009

У меня есть текстовый файл с несколькими строками. Я попытаюсь установить шаблон для добавления нового возврата каретки в некоторые строки текста. Эти строки таковы:

lorem ipsum.
Долор Сит Амет, Concetetur Adipiscing Elit [FIS] Donec feugiat

Ну, шаблон - это строка, за которой следует другая, которая имеет несколько символов и символ '['. Если '[' отсутствует, шаблон завершается неудачно и возврат каретки не добавляется.

Как я могу сделать это с помощью регулярных выражений ??

Я использую C # в качестве языка программирования и движка регулярных выражений.

Ответы [ 3 ]

3 голосов
/ 02 ноября 2009

Если вы хотите добавить разрыв строки после a. тогда вы просто заменяете его на себя и разрыв строки. Чтобы убедиться, что это последний символ, используйте заглядывание, чтобы убедиться, что за ним следует пробел, т. Е. (?=\s)


Итак, заменить символом новой строки (рекомендуется для большинства ситуаций):

replace( input , '\.(?=\s)' , '\.\n' )


Если вы должны использовать возврат каретки (а для требуется даже очень мало мест, даже в Windows), вы можете просто добавить один:

replace( input , '\.(?=\s)' , '\.\r\n' )


Если вы хотите убедиться, что всегда сопровождается двумя переносами строк, и не вызывает дополнительных разрывов строк, если они уже нужны, тогда это становится немного более сложным и требует отрицательного взгляда, но выглядит так:

replace( input , '\.(?!\S)(?:\r?\n){0,2}' , '\.\r\n\r\n' )

Поскольку движки регулярных выражений по умолчанию настроены на жадность, {0,2} будет пытаться найти совпадение дважды, затем один раз, а затем - ноль раз - в этот момент отрицательный взгляд на незаполненное пространство гарантирует, что это действительно конец слова.

(Если у вас может быть более двух новых строк и вы хотите сократить их до двух, вы можете просто использовать вместо него {0,}, в котором * используется в качестве сокращенной записи.)


Вероятно, стоит отметить, что ни один из вышеперечисленных не будет занимать пробелы / табуляции - если это желательно, то можно также изменить предпросмотр с (?=\s) на \s+, вы можете сделать вторую замену \n[ \t]+ на * 1027. * удалить все пробелы / символы табуляции или что-то подобное, в зависимости от того, что именно вы пытаетесь сделать.

2 голосов
/ 02 ноября 2009

Полагаю, вы можете использовать \ r для возврата каретки и \ n для новой строки

1 голос
/ 02 ноября 2009

Какой вкус? Здесь это сделано для C #:

string yourString = @"el tiempo.
campo vectorial vector field. [FIS] Campo ";
string newString = Regex.Replace(yourString, "el tiempo.", "$0\r\n");  // just \n may be sufficient though

РЕДАКТИРОВАТЬ: выше, это ответ на оригинальный вопрос. После отличного ответа Питера Боутона мне не нужно много добавлять. Что ж, возможно, это небольшое регулярное выражение без проверочных утверждений просто заменит все точки, за которыми следуют одна или несколько строк новой строки, двумя символами новой строки.

string newString = Regex.Replace(yourString, @"\.(\r|\n)+", ".\r\n\r\n");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...