2016-07-11 3 views
0

У меня есть набор данных, который мне нужно получить из одной строки с каждой стороны.Регулярное выражение: множественное появление новой строки Результат с вкладками

Скажем у меня есть этот набор данных:

test 
pizza 

pudding 
cheese 


Newt 
somethingelse 

otherstuf 


pokemon 
somedate 
derp 

Обратите внимание на разницу между 2 и 1 новых линий.

Если есть две новые строки, будет создана новая строка. Когда есть 1 новая строка, значение «значение» будет в той же строке, что и пустое значение. Этот набор данных стал бы это:

test pizza   pudding cheese 
Newt somethingelse otherstuf 
pokemon somedate  derp 

Снова обратите внимание на первую строку в этом примере, где пустая строка между pizza и pudding 1 новая линия вместо 2.

Я попытался согласования на новый line: ^\n и замените на \t, но это доставит мне все, что наложено на одну строку, которая не то, что я хочу. Я использую sublime для этого.

ответ

1

Я предлагаю

(.)\R{1,2}+(?!\R) 

и заменить $1\t. Таким образом, вы будете соответствовать только 1 - 2 строкам и заменять их вкладкой. A (.) будет следить за тем, чтобы на первой строке появлялись некоторые данные. Подробнее

enter image description here

Pattern:

  • (.) - Группа 1 захватывая символы, кроме символа новой строки
  • \R{1,2}+ - 1 или 2 ...
  • разрывы строк
  • (?!\R) - .. . Это не сопровождается разрывом линии.

Если разрешить слияние пустых строк, вы можете попробовать

(?<!\n)\R{1,2}+(?!\R) 

и замените \t.

Затем, чтобы заменить 3 переносы строк с одним, используйте

\R{3} 

и заменить \r\n или \n или \r, в зависимости от OS/требований.

0

Когда вы говорите о новой строке, вы подразумеваете пустую строку, иначе достижение пустой строки требует проверки двух символов новой строки. Это верно и для 2 новых линий.

Поиск: (?<!\s)\n(?=\S)|\n{2}

Заменить: \t

enter image description here

Только для демонстрации моего шаблона.

0

Выберите хорошую последовательность новой строки (в соответствии с вашим файлом) и используйте два прохода. Пример с последовательностью новой строки с Windows:

Используйте два прохода:

  • заменить \r\n с \t
  • заменить \t\t\t с \r\n
+0

Nopes файл использует только '\ n' работает на Linux здесь – Baklap4

+0

@ Baklap4: В этом случае вам нужно использовать '\ n' вместо' \ r \ n'. –