Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.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 Perl中的模式匹配精确单词和删除_Regex_Perl - Fatal编程技术网

Regex Perl中的模式匹配精确单词和删除

Regex Perl中的模式匹配精确单词和删除,regex,perl,Regex,Perl,我正在使用Perl清理原始文本文件,该文件包含一些奇怪的字符,如下所示: printableNNH=0A=0A =0A=0A=0A Event Registration Request=0A=0A ... 在这个文件中有许多=0A的情况,我必须处理掉。它们出现在上面类似的随机集合中,例如2和3 我在Perl脚本中使用以下行来消除这些字符: tr/=0A//d; #remove =0A 这是可行的,但它也会从所有电话号码和其他包含0的内容中删除0。 有谁能建议模式匹配精确的子字符串

我正在使用Perl清理原始文本文件,该文件包含一些奇怪的字符,如下所示:

printableNNH=0A=0A    =0A=0A=0A    Event Registration Request=0A=0A ...
在这个文件中有许多=0A的情况,我必须处理掉。它们出现在上面类似的随机集合中,例如2和3

我在Perl脚本中使用以下行来消除这些字符:

tr/=0A//d; #remove =0A
这是可行的,但它也会从所有电话号码和其他包含0的内容中删除0。


有谁能建议模式匹配精确的子字符串并将其删除吗?

tr//
不是正则表达式:它将(使用
-d
修饰符)用零字符替换单个字符

在您的情况下,使用
tr/=0A/
会将每次出现的
=
0
A
替换为零

然而,
s//
是一个替换运算符,它将用指定的字符串替换正则表达式—在您的情况下为零个字符

因此,使用:

open my $input, '<', 'in.txt' or die "$!";

while (<$input>){
    chomp;
    s/=0A//g;
    print "$_\n";
}

打开我的$input,”
tr//
不是正则表达式:它将(使用
-d
修饰符)用零字符替换单个字符

在您的情况下,使用
tr/=0A/
会将每次出现的
=
0
A
替换为零

然而,
s//
是一个替换运算符,它将用指定的字符串替换正则表达式—在您的情况下为零个字符

因此,使用:

open my $input, '<', 'in.txt' or die "$!";

while (<$input>){
    chomp;
    s/=0A//g;
    print "$_\n";
}

打开我的$input,如果您只想删除
=0A
而不想删除
=
0
A

$string=~s/=0A//g;

如果您只想删除
=0A
,而不想删除
=
0
A

$string=~s/=0A//g;
发件人:

tr/SEARCHLIST/REPLACEMENTLIST/cds
y/搜索列表/替换列表/CD

将搜索列表中出现的所有字符与替换列表中的相应字符进行音译

代替替换所有出现的
=0A
tr
替换所有出现的
=
0
A

perl -we '$_ = "foo=0AbAr0"; tr/=0A//d; print'
印刷品:

foobr
foobAr0
相反,您应该使用
s/pattern/replacement/
,例如

perl -we '$_ = "foo=0AbAr0"; s/=0A//g; print'
印刷品:

foobr
foobAr0
g
修饰符全局执行替换,即对一行中的每个事件执行替换。

来自:

perl -pe 's/=0A//g' inFile > outFile
tr/SEARCHLIST/REPLACEMENTLIST/cds
y/搜索列表/替换列表/CD

将搜索列表中出现的所有字符与替换列表中的相应字符进行音译

代替替换所有出现的
=0A
tr
替换所有出现的
=
0
A

perl -we '$_ = "foo=0AbAr0"; tr/=0A//d; print'
印刷品:

foobr
foobAr0
相反,您应该使用
s/pattern/replacement/
,例如

perl -we '$_ = "foo=0AbAr0"; s/=0A//g; print'
印刷品:

foobr
foobAr0

g
修饰符全局执行替换,即一行中的每一次出现。

它还应删除所有出现的
=
a
。请参见“报价和类似报价的运算符”下的
perldoc perlop
。是否确实要删除它们?在我看来,它就像是一种特殊字符的编码,所以整个数据都在一行上。如果
=0A
=
\n
,您可以运行替换
s/=([0-9A-Fa-f]{2})/chr hex$1/eg
来解码字符串。它还应该删除所有出现的
=
A
。请参见“报价和类似报价的运算符”下的
perldoc perlop
。是否确实要删除它们?在我看来,它就像是一种特殊字符的编码,所以整个数据都在一行上。如果
=0A
=
\n
,则可以运行替换
s/=([0-9A-Fa-f]{2})/chr hex$1/eg
来解码字符串。
perl -pe 's/=0A//g' inFile > outFile