簡體   English   中英

在Perl中替換特定捕獲組而不是整個正則表達式

[英]Replace specific capture group instead of entire regex in Perl

我有一個帶有捕獲組的正則表達式,它在更廣泛的上下文中匹配我想要的。 然后,我將捕獲組$1用於滿足我的需求。 這很簡單。

但是當我只想用替代品替換$1的內容而不是整個正則表達式時,如何使用s///捕獲組?

謝謝!
-F

據我了解,您可以使用不消耗字符的前瞻或后視。 或者將數據保存在組中,只刪除您要查找的內容。 例子:

預見:

s/your_text(?=ahead_text)//;

分組數據:

s/(your_text)(ahead_text)/$2/;

如果您只需要替換一個捕獲,那么使用@LAST_MATCH_START@LAST_MATCH_ENDuse English ;請參閱perldoc perlvar )以及substr可能是一個可行的選擇:

use English qw(-no_match_vars);
$your_string =~ m/aaa (bbb) ccc/;
substr $your_string, $LAST_MATCH_START[1], $LAST_MATCH_END[1] - $LAST_MATCH_START[1], "new content";
# replaces "bbb" with "new content"

這是一個老問題,但我發現下面更容易將以>something開頭的行替換為>something_else 適合更改fasta序列的標題

  while ($filelines=~ />(.*)\s/g){
        unless ($1 =~ /else/i){
                $filelines =~ s/($1)/$1\_else/;
        }

  }

暫無
暫無

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

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