我在这里得到了一个问题的答案:How do I know if a file is tab or space delimited in Perl?
但是如果有人可以分解正则表达式并解释发生了什么以及为什么它不能在文件的最后一行上工作,那真的会对我有所帮助。
~/^(\d+\s+)+?$/
我认为上面的'+'在后面所以如果我添加'*'它会起作用,因为*表示零或更多......但是这不起作用
答案 0 :(得分:3)
Regex: /^(\d+\s+)+?$/
Parts: 1 2 3 456
它应匹配整行空格或制表符分隔数字的字符串。我不确定为什么它会在最后一行失败..也许最后没有空格?由于每个数字后面必须至少有一个空格,可能就是它。
答案 1 :(得分:0)
实际上原始的正则表达式不接受空行,这可能就是为什么它不能在文件的最后一行上工作(指向示例文件的链接会很好)。它应该是这样的:
perl -ne 'if ($_=~/^(\d+\s+)*$/){print "yep\n";}'
另一种方法可能是检查所有字符是空格还是数字。
接受空行时:
perl -ne 'if ($_=~/^[\s\d]*$/){print "yep\n";}'
不接受空行时:
perl -ne 'if ($_=~/^[\s\d]+$/){print "yep\n";}'