Regex Perl中的模式匹配精确单词和删除
我正在使用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。 有谁能建议模式匹配精确的子字符串
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