在 Perl 中替换多个子字符串
Substitute multiple substrings in Perl
我正在尝试匹配在 Perl 中看起来像这样的字符串
%TRMMHDT128F422F115<SEP>SOJEZBM12A6D4FEA96<SEP>Thursday<SEP>A Hole In The World (Album Version) [etc]
字符串的末尾并不总是带有圆括号 and/or。我想要做的是删除歌曲周围的所有绒毛,并最终删除歌曲中的所有标点符号。我目前可以通过以下语句分两次执行此操作:
$line =~ s/.*>//;
$line =~ s/(\(.*)|(\[.*)//;
我想一次完成所有这些,但是如果我在第一个表达式之后和第二个表达式之前添加管道 |
,它不会删除圆括号或方括号中的任何内容。像这样:
$line =~ s/.*>|(\(.*)|(\[.*)//;
现在在正则表达式测试器中,它匹配了我希望它匹配的所有内容,但它并没有替换所有内容。
试试这个:
$line =~ s/(.*>)(.*)(\(.*)//;
它的作用是匹配该模式的整行,并将整行替换为歌曲名称 $2。
在 Perl 中替换多个子字符串:
$line =~ s/.*>|(\(.*)|(\[.*)//g;
在 Perl 正则表达式中,g
修饰符不断应用 RegEx 直到它停止匹配。
尽管最后两个条件几乎相同,我可能会将其合并为:
$line =~ s/.*>|([([].*)//g;
我正在尝试匹配在 Perl 中看起来像这样的字符串
%TRMMHDT128F422F115<SEP>SOJEZBM12A6D4FEA96<SEP>Thursday<SEP>A Hole In The World (Album Version) [etc]
字符串的末尾并不总是带有圆括号 and/or。我想要做的是删除歌曲周围的所有绒毛,并最终删除歌曲中的所有标点符号。我目前可以通过以下语句分两次执行此操作:
$line =~ s/.*>//;
$line =~ s/(\(.*)|(\[.*)//;
我想一次完成所有这些,但是如果我在第一个表达式之后和第二个表达式之前添加管道 |
,它不会删除圆括号或方括号中的任何内容。像这样:
$line =~ s/.*>|(\(.*)|(\[.*)//;
现在在正则表达式测试器中,它匹配了我希望它匹配的所有内容,但它并没有替换所有内容。
试试这个:
$line =~ s/(.*>)(.*)(\(.*)//;
它的作用是匹配该模式的整行,并将整行替换为歌曲名称 $2。
在 Perl 中替换多个子字符串:
$line =~ s/.*>|(\(.*)|(\[.*)//g;
在 Perl 正则表达式中,g
修饰符不断应用 RegEx 直到它停止匹配。
尽管最后两个条件几乎相同,我可能会将其合并为:
$line =~ s/.*>|([([].*)//g;