【发布时间】:2016-11-18 18:28:27
【问题描述】:
早安!
我正在努力解决一个问题,我从没想过会是一个问题。我有一个带有分隔符 ; 的 .csv 文件,我想检查它的语法。它看起来像这样:
wellenname;tag
Welle A;01/02/2016
Welle B3;14/11/2016
server;welle
server5name032;Welle B3 Rand
server3name01;Welle A
server2name;Welle B3
所以我有一个格式精美的 .csv 文件,我可以使用正则表达式对其进行处理。因此,我为正则表达式构建了四种情况:
- wellenname;标签\n
- (Welle [A-Z]+[0-9]*;\d{2}/\d{2}/\d{4}\n)+
- 服务器;很好\n
- (\S*;Welle [a-z,A-Z,0-9]+( 兰德)(\n))+
这在名为 The Regex Coach 的工具中工作得非常漂亮,它基本上试图匹配一个正则表达式和一个字符串,并在它遇到困难的地方输出。
然后我把它放在 Perl 中。读取文件并检查语法:
use strict;
use warnings;
use Data::Dumper;
my $filename = 'theFile.csv';
my $content;
open(my $fh, '<', $filename) or die "Could not open file $filename $!";
$content = join('',<$fh>);
if ($content =~ /wellenname;tag\n(Welle [A-Z]+[0-9]*;\d{2}\/\d{2}\/\d{4}\n)+server;welle\n(\S*;Welle [a-z,A-Z,0-9]+( Rand)*(\n)*)+/) {
print "Syntax seems to be valid!";
}else{
print "You have syntax errors!";
}
我逐行浏览了文件,但即使我每个部分只插入一个条目,它也会失败。 (或更好:它跳转到 else 并打印字符串)
我是不是忘了某事。还是我的想法有市长错误? 如果有人能给我提示,我会很高兴!
【问题讨论】: