簡體   English   中英

在Perl中替換多個子字符串

[英]Substitute multiple substrings in Perl

我正在嘗試匹配Perl中看起來像這樣的字符串

%TRMMHDT128F422F115<SEP>SOJEZBM12A6D4FEA96<SEP>Thursday<SEP>A Hole In The World (Album Version) [etc]

字符串的結尾不一定總是帶有括號和/或括號。 我想做的是去除歌曲周圍的所有絨毛,最后去除歌曲中的所有標點符號。 我現在可以使用以下語句通過兩步來完成此操作:

$line =~ s/.*>//;
$line =~ s/(\(.*)|(\[.*)//;

我想一次完成所有操作,但是如果添加管道| 在第一個表達式之后和第二個表達式之前,它將不會刪除括號或方括號中的任何內容。 像這樣:

$line =~ s/.*>|(\(.*)|(\[.*)//;

現在,在正則表達式測試器中,它可以匹配我希望匹配的所有內容,但不能代替所有內容。

在Perl中替換多個子字符串:

$line =~ s/.*>|(\(.*)|(\[.*)//g;

在Perl正則表達式中, g修飾符會不斷應用RegEx直到停止匹配。

盡管由於后兩個條件幾乎相同,所以我可能會將其合並為:

$line =~ s/.*>|([([].*)//g;

嘗試這個:

$line =~ s/(.*>)(.*)(\(.*)/$2/;

這是因為它匹配該模式的整行,並用歌曲標題$ 2替換整行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM