[英]In Perl, how do I remove consecutive pairs of characters from a string?
(這是官方的perlfaq答案 ,減去任何后續編輯)
您可以使用替換運算符查找字符對(或字符集)並將其替換為單個實例。 在這個替換中,我們在(.)
找到一個字符。 內存括號將匹配的字符存儲在后引用\\g1
,我們使用它來要求緊跟其后的相同內容。 我們用$1
的字符替換字符串的那部分。
s/(.)\g1/$1/g; # 5.10 or later
s/(.)\1/$1/g; # earlier versions
我們也可以使用音譯運算符tr///
。 在這個例子中,我們的tr///
的搜索列表方面什么都沒有,但是c選項補充了它,所以它包含了所有內容。 替換列表也沒有任何內容,因此音譯幾乎是無操作,因為它不會進行任何替換(或者更確切地說,將字符替換為自身)。 但是, s
選項會壓縮字符串中的重復字符和連續字符,因此字符不會顯示在其自身旁邊
my $str = 'Haarlem'; # in the Netherlands
$str =~ tr///cs; # Now Harlem, like in New York
$str=~ s/(.)\1+/$1/g;
這是來自上一個穩定版本的perlfaq4的答案:
如何刪除連續的字符對?
(由brian d foy提供)
您可以使用替換運算符查找字符對(或字符集)並將其替換為單個實例。 在這個替換中,我們在(。)中找到一個字符。 內存括號將匹配的字符存儲在后引用\\ 1中,我們使用它來要求緊跟其后的相同內容。 我們用$ 1中的字符替換字符串的那部分。
s/(.)\1/$1/g;
我們也可以使用音譯運算符tr ///。 在這個例子中,我們的tr ///的搜索列表方面什么都沒有,但是c選項補充了它,所以它包含了所有內容。 替換列表也沒有任何內容,因此音譯幾乎是無操作,因為它不會進行任何替換(或者更確切地說,將字符替換為自身)。 但是,s選項會壓縮字符串中的重復字符和連續字符,因此字符不會顯示在其自身旁邊
my $str = 'Haarlem'; # in the Netherlands
$str =~ tr///cs; # Now Harlem, like in New York
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.