簡體   English   中英

在Perl中,如何從字符串中刪除連續的字符對?

[英]In Perl, how do I remove consecutive pairs of characters from a string?

我有一個包含字符對的字符串,我想用一個字符替換每個運行。 我怎樣才能做到這一點?


這是官方常見問題解答中的一個問題 我們將perlfaq導入Stack Overflow

(這是官方的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.

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