Соединение разрывов строк запятыми и удаление пустых строк до разрывов строк в Notepade++

У меня есть такой текстовый файл...

$index 57320   
$title The vertex-cover polynomial of a graph  
$time 1988  
$abstract In this paper we define the vertex-cover...  

$index 57321   
$title Locating stations on rapid transit lines  
$time 1978  

$index 57322   
$title Fast heuristics for large scale covering-location problems  
$time 1998  
$abstract We propose fast heuristics for large scale...  

$index 57323   
$title Efficient vector processing on dataflow supercomputer SIGMA-1  
$time 2001  
$abstract Efficiency in vector handling is the key to obtaining high...  

Я хочу преобразовать каждый linebreak в comma и в то же время каждый emptyline в linebreak. Принимая во внимание, что вывод, например, текста должен быть таким (текст сокращен с помощью «точек»...):

$index 57320,$title The vertex-cover...,$time 1988,$abstract In this paper...  
$index 57321,$title Locating stations on...,$time 1978  
$index 57322,$title Fast heuristics for...,$time 1998,$abstract We propose fast...  
$index 57323,$title Efficient vector...,$time 2001,$abstract Efficiency in...  

Я попробовал заменить \r\n на ,, и это работает, но как одновременно применить обе операции для преобразования linebreaks в comma и emptyline для использования в качестве linebreaks для получения желаемого результата.

Пожалуйста, помогите в этом отношении.
Спасибо!


person maliks    schedule 06.11.2015    source источник


Ответы (2)


Поместите поиск и замену в режим регулярных выражений.

Находить:

([^\r\n]+)\r\n

Заменить:

$1,

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

([^\r\n]+?) *\r\n
person trognanders    schedule 06.11.2015
comment
@Bailey - работает нормально, но запятые между значениями не вставляются, отображаются пробелы - person maliks; 06.11.2015
comment
@taufel Запятые добавляются частью замены, поэтому $1 является значением столбца, но вы добавляете запятую после $1, . - person trognanders; 17.11.2015

Вам нужно сделать это в два этапа. Во-первых, замените все разрывы строк запятыми, но только если они не стоят в начале строки и только если после них следует символ $:

(?<!^)[ \t]*\r?\n(?=\$)

Замените все эти совпадения на ,. Обратите внимание на часть [ \t]*, используемую для очистки пробелов в конце каждой строки - я обнаружил это в опубликованном вами образце; если его нет на самом деле, вы можете опустить эту часть. Протестируйте его на сайте regex101.com.

Затем замените все (\r?\n){2,} на $1.

person Tim Pietzcker    schedule 06.11.2015
comment
@Tim - Как удалить пробелы между строками, это дает пустые строки между каждой из четырех строк в блокноте ++ - person maliks; 06.11.2015
comment
Да, именно поэтому вам нужен второй шаг - см. последнюю строку моего ответа. Невозможно сделать оба в одном регулярном выражении. - person Tim Pietzcker; 06.11.2015
comment
@ Тим - я попробовал второй шаг в блокноте ++, но он ничего не соответствует после 1-го шага. - person maliks; 06.11.2015
comment
@ Тим - я думаю, что ответ Бейли более конкретен, он делает свое дело за один шаг. - person maliks; 06.11.2015
comment
@ Тауфель Верно. Я должен быть более осторожным, когда говорю, что что-то невозможно :) (И вы должны поддержать ответ Бейли). - person Tim Pietzcker; 06.11.2015