我有一个从文本文件中读取的字符串,但在 Ubuntu Linux 中,我尝试从末尾删除其换行符。
我用了所有的方法。但是对于 s/\n|\r/-/
(我看它是否找到任何替换任何新行字符串)它替换字符串,但当我打印它时它仍然转到下一行。此外,当我使用 chomp
或 chop
,字符串被完全删除。我找不到任何其他解决方案。我该如何解决这个问题?
use strict;
use warnings;
use v5.12;
use utf8;
use encoding "utf-8";
open(MYINPUTFILE, "<:encoding(UTF-8)", "file.txt");
my @strings;
my @fileNames;
my @erroredFileNames;
my $delimiter;
my $extensions;
my $id;
my $surname;
my $name;
while (<MYINPUTFILE>)
{
my ($line) = $_;
my ($line2) = $_;
if ($line !~ /^(((\X|[^\W_ ])+)(.docx)(\n|\r))/g) {
#chop($line2);
$line2 =~ s/^\n+//;
print $line2 . " WRONG FORMAT!\n";
}
else {
#print "INSERTED:".$13."\n";
my($id) = $13;
my($name) = $2;
print $name . "\t" . $id . "\n";
unshift(@fileNames, $line2);
unshift(@strings, $line2 =~ /[^\W_]+/g);
}
}
close(MYINPUTFILE);
最佳答案
删除 Unicode 换行字符(包括 CRLF 对)的正确方法是使用 \R
regex 元字符,在 v5.10 中引入。use encoding
pragma 强烈反对。您应该使用 use open
pragma,或在 3-arg open
的 mode 参数中使用编码,或使用 binmode
.
use v5.10; # minimal Perl version for \R support
use utf8; # source is in UTF-8
use warnings qw(FATAL utf8); # encoding errors raise exceptions
use open qw(:utf8 :std); # default open mode, `backticks`, and std{in,out,err} are in UTF-8
while (<>) {
s/\R\z//;
...
}
关于regex - 从 Perl 中的字符串中删除换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9751161/