(Регулярные выражения) 2Liner → 1Liner - PullRequest
0 голосов
/ 27 сентября 2018

Заранее спасибо и извините за плохой английский!

Я хочу

'Нечетные строки' 'CRLF' 'Четные строки' CRLF '→' Нечетные строки '', '' Четные строки '' CRLF '

Пример ввода:

  0
SECTION
  2
HEADER

Желаемый вывод:

  0,SECTION
  2,HEADER

Что я пробовал:

Find: (.*)\n(.*)\n
Replace: $1,$2\n

Я хочу ー Легко видеть dxf

Ответы [ 4 ]

0 голосов
/ 28 сентября 2018

Файл DXF в порядке

Строка ODD abc ...

(AWK)

NR%2!=0{L1=$0}
NR%2==0{print L1 "," $0;L1=""}
0 голосов
/ 27 сентября 2018

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

"0 \ nSECTION \ n 2 \ nHEADER" .replace (/([\ d] +) ([\ s \ n] +) ([^ \ d \ s \ n] *) / г, "$ 1, $ 3")

var myStr = `  0
SECTION
  2
HEADER`;

var output = myStr.replace(/([\d]+)([\s\n]+)([^\d\s\n]*)/g,"$1,$3");
console.log(output);
0 голосов
/ 27 сентября 2018

В качестве примера данных вы можете захватить одну или несколько цифр в группе захвата 1 с последующим соответствием новой строки.

В группе замены используйте 1 с запятой.

Совпадение

(\d+)(?:r?\n|\r)

Regex demo

Замена

$1,

0 голосов
/ 27 сентября 2018

. соответствует символу новой строки так же, как и любому другому символу, поэтому первый .* сожрет всю строку и ничего не оставит.

Вместо этого используйте группу символов, котораяисключает \n.Также не ясно, заканчивается ли ваша последняя строка символом \n или нет, поэтому Regex должен обработать это:

Найти

([^\n]*)\n([^\n]*)(\n|$)

Заменить

$1,$2$3

Разбивка:

  • ([^\n]*) - 0 или более символов, которые не \n
  • \n
  • ([^\n]*)
  • (\n|$) - \n или конец строки
...