我正在使用文本文件创建CSV文件。对Regex来说很新,我需要完成CSV文件。
我需要做的是删除每一行新文本并将它们放在一行中。
例如,这个数据:
ABC Company INC
123 Some Street
Winchester, KY
需要采用以下格式:
ABC Company INC;123 Some Street;Winchester, KY
加号,在我的文件中......它有几个条目,每个公司都有一个换行符。
它是这样的:
ABC Company
123 Street
Winchester, KY
DEF Company
456 Street
Winchester, KY
并且如此:
ABC Company;123 Street;Winchester, KY
DEF Company;456 Street;Winchester, KY
我们可以在正则表达式中这样做吗?如果是这样,那怎么样?
更多信息:
这不适用于编程或编码相关问题。
它更多的数据转换或操作。我只使用文本编辑器。我需要编辑文本文件(挖掘的数据)并将其转换为CSV文件。
如果我们可以使用其他工具,那么请提及它。
更新
有了这个特殊的问题,凭借我目前的知识水平,我发现波希米亚的答案在我的案例中更有帮助。它确实帮助我完成了这项任务。
然而, Sobrique 提供的答案使用起来更强大。只有我不知道如何使用它。我用Pearl脚本做的是......我复制了脚本的整个打印输出,因为我不知道如何将它输出到文件中。另外,我还遇到了一些不准确的数据。它是一个很棒的工具,只是我现在无法处理它。
答案 0 :(得分:1)
做这样的替换:
Search: (?<=.)$(\s(?!^$))+^
Replace: ;
然后,删除空白行:
Search: ^$\s+
Replace: <nothing>
那些环顾四周是为了确保空行(零长度)不匹配。
答案 1 :(得分: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 editing' - 这只会打印它)