Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何使用正则表达式格式化此txt文件_Regex - Fatal编程技术网

Regex 如何使用正则表达式格式化此txt文件

Regex 如何使用正则表达式格式化此txt文件,regex,Regex,有一个.txt文件,将数据折叠成一列,希望将其转换为.csv,以便将其导入DB表 源文件: 1000 AAAAAAAAAA 100,000.00 2000 BBBBBBBBBB 200,000.00 3000 CCCCCCCCCC 300,000.00 4000 DDDDDDDDDD 400,000.00 希望将其转变为: 1000,AAAAAAAAA,100,000.00 2000,BBBBBBBBB,200,000.00 3000,CCCCCCCCC,300,000.00 4000,DDD

有一个
.txt
文件,将数据折叠成一列,希望将其转换为
.csv
,以便将其导入DB表

源文件:

1000
AAAAAAAAAA
100,000.00
2000
BBBBBBBBBB
200,000.00
3000
CCCCCCCCCC
300,000.00
4000
DDDDDDDDDD
400,000.00
希望将其转变为:

1000,AAAAAAAAA,100,000.00
2000,BBBBBBBBB,200,000.00
3000,CCCCCCCCC,300,000.00
4000,DDDDDDDDD,400,000.00
到目前为止,我已经尝试过这一点,但仍被困在那里:

find  -       ^(\d+)(\s)
substitue -   $1,
这让我得到了这个输出:

1000,AAAAAAAAA
100,000.00
2000,BBBBBBBBB
200,000.00
3000,CCCCCCCCC
300,000.00
4000,DDDDDDDDD
400,000.00
我希望有人能指点我们前进

谢谢,
CH

尝试以下查找和替换方法:

Find:    (.*)\r?\n(.*)\r?\n(.*)(?:\r?\n|$)
Replace: $1|$2|$3\n
这种方法捕获三条连续线中的每一条,然后使用管道作为分隔符将它们连接到一条线中。请注意,此处不能使用逗号作为分隔符,因为您的一些数字数据已经使用逗号

按照下面的链接进行演示


如果每行包含3项,可以尝试根据空格拆分txt文件,然后写入csv文件

例如,在python中:

result = []

def writeToCSV(result):
with open('new.csv', 'a') as writeFile:
    writer = csv.writer(writeFile)
    for i in range(len(result)):
        writer.writerow(result)

with open('yourfile.txt', 'r') as csvfile:
spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')

ind = 0
for row in spamreader:
    result.append(row)
    ind += 1
    if(ind == 3):
        ind = 0
        writeToCSV(result)
        result = []

您可以使用这样的正则表达式:

(\d+)\n(\w+)\n([\d,.]+)

使用此替换字符串:

$1,$2,$3

这里有些不对劲,因为在大多数数据库上,您应该已经能够导入此文件,使用空格字符作为列分隔符。你的数据库是什么?我现在正在使用ORCL数据库,我可以使用MySQL/MSSQL,任何一种方式都可以。也许我的方法是错误的,我想我无法将其导入db,因为每一行都折叠了3行,我想如何将其取消折叠是我的问题。我错调了,因为您的原始数据格式不正确。哦,对不起,我注意到我的格式没有保留,必须重新设置。抱歉,哈哈!!你真漂亮!!非常感谢,美女。我省略了告诉DB loader工具使用
|
作为分隔符的步骤,但我想你可以找出其余的:-)哈,是的,我一看到管道就想到了。我用你的代码完美地格式化了行数据,在顶部有另一个用户帮助我格式化的标题数据,如何将第二种格式仅应用于前7行,这样整个txt文件的列数和管道分隔数都是精确的。单靠Regex无法轻松做到这一点。我会使用Java、C#、Python或Perl等应用程序语言。也就是说,7行已经足够少了,如果你需要的话,你可以用翅膀和手来做。谢谢你Ryan,我也会试试这个!!感谢您的详细回复!谢谢你,费德里科!!工作起来很有魅力。我也会保留这个。非常感谢。在Windows上,行的结尾可能是
\r\n