2015-06-13 3 views
0

Я в процессе создания файла CSV из текстового файла. Очень новое для Regex, и мне нужно закончить файл CSV.Как сопоставить каждое начало новой строки текста в Regex?

Что мне нужно сделать, так это удалить каждую новую строку текста и поместить их в одну строку.

Например, эти данные:

ABC Company INC 
123 Some Street 
Winchester, KY 

Необходимо, чтобы быть в следующем формате:

ABC Company INC;123 Some Street;Winchester, KY 

Plus, на мой файл ... он имеет несколько записей с одной строки-брейке каждый после одной компании.

Это как это:

ABC Company 
123 Street 
Winchester, KY 

DEF Company 
456 Street 
Winchester, KY 

И сделать это так:

ABC Company;123 Street;Winchester, KY 
DEF Company;456 Street;Winchester, KY 

Можем ли мы сделать это в Regex? Если да, то как?

Дополнительная информация:

Это не для программирования или кодирования связанный с этим вопрос.

Это больше данных для преобразования или манипуляции. Я использую только текстовый редактор. Мне нужно отредактировать текстовый файл (заминированные данные) и преобразовать его в файл CSV.

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

UPDATE:

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

Однако ответ предоставлен Sobrique более мощный в использовании. Только я не знаю, как использовать его хорошо. То, что я сделал с сценарием Pearl, - это ... Я скопировал весь печатный результат скрипта, так как не знаю, как его выводить в файл. Кроме того, я также столкнулся с некоторыми неточными данными. Это отличный инструмент, только я не мог справиться с этим прямо сейчас.

+1

какой язык вы используете? – depperm

+2

Нет необходимости в регулярном выражении для этого, просто используйте инструменты манипуляции с языком. –

+0

Не могли бы вы использовать язык программирования, такой как Python, Ruby, C, что бы вместо обычных выражений? – zedfoxus

ответ

1

сделать замену, как это:

Search: (?<=.)$(\s(?!^$))+^ 
Replace: ; 

затем, чтобы удалить пустые строки:

Search: ^$\s+ 
Replace: <nothing> 

Те выглядят обходные там, чтобы убедиться, что пустые строки (нулевой длины) не являются соответствует.

+0

Это работает, но как я должен использовать его с несколькими данными. Я обновил свой вопрос выше. Я использую Sublime Text для редактирования. – Kupalzky

+0

@ Kupalzky Я отредактировал ответ и протестировал его с помощью TextWranger. Дайте мне знать, если это не сработает. – Bohemian

+0

Попробуй с Sublime Text – Kupalzky

1

Регулярные выражения на самом деле не являются инструментом для этой работы. Они касаются соответствия шаблонов.

Возможно, вы найдете tr, так как вы можете транслитерировать linefeed на номер ;.

В качестве альтернативы в Perl:

#!/usr/bin/perl 

use strict; 
use warnings; 

while (<DATA>) { 
    chomp; 
    print; 
    if (m/^\s*$/) { 
     print "\n"; 
    } 
    else { 
     print ";"; 
    } 
} 

__DATA__ 
ABC Company 
123 Street 
Winchester, KY 

DEF Company 
456 Street 
Winchester, KY 

будет делать трюк.

Чтобы превратить это в один лайнер:

perl -e 'while (<>) { chomp; print; if (m/^\s*$/) { print "\n" } else { print ";" } }' yourfile 

(perl -i позволяет 'INPLACE редактирование' - это будет просто распечатать его)

+0

Я пробовал это, но никаких изменений не внес. Я на Ubuntu 14.04 64-бит, Perl v5.18.2 – Kupalzky

+1

Это не сработает с учетом сделанных вами изменений. Я отредактирую. Он не редактирует файл - если он работает, вам нужно перенаправить вывод в файл – Sobrique

+0

Он работает с использованием одного лайнера, но не может понять, как выводить его в файл. Пробовал 'mysource-file output-file' – Kupalzky

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