[英]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_END
( use 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.