regex - 从 Perl 中的字符串中删除换行符

标签 regex string perl

我有一个从文本文件中读取的字符串,但在 Ubuntu Linux 中,我尝试从末尾删除其换行符。

我用了所有的方法。但是对于 s/\n|\r/-/ (我看它是否找到任何替换任何新行字符串)它替换字符串,但当我打印它时它仍然转到下一行。此外,当我使用 chompchop ,字符串被完全删除。我找不到任何其他解决方案。我该如何解决这个问题?

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/

相关文章:

regex - 为什么 grep 不从安全实用程序的输出中提取?从 echo 作品中进行比较提取

java - 按换行符分割 Java 字符串

javascript - 正则表达式立即停止匹配或如果有逗号

c++ - printf 字符串输出 "Dz↕"getch() C++

string - 在 AWK 中,如何拆分与 "record"具有相同字符串的连续行?

javascript - html 标签在正则表达式中不匹配

javascript - 忽略反斜杠后的字符 "\"- javascript

perl - 如何在perl中执行cleartool命令

perl - 如何在 Perl 中构建一个简单的菜单?

perl - 在 perl 中向现有对象添加新方法