2012-08-26 9 views

Odpowiedz

1

Jeśli tylko trzeba wymienić uchwycić następnie używając @LAST_MATCH_START i @LAST_MATCH_END (z use English patrz perldoc perlvar) wraz z substr może być wykonalnym wyborem:

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" 
+0

Wielkie dzięki, to działa! – flohei

+1

Czy będzie anonimowy downvoter proszę wyjaśnić jego głosowanie? Dzięki. –

12

Rozumiem, że można używać wyprzedzania lub niedowidzenia, które nie pochłaniają znaków. Lub zapisuj dane w grupach i usuwaj tylko to, czego szukasz. Przykłady:

Z antycypowana:

s/your_text(?=ahead_text)//; 

Grupowanie danych:

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

To jest stare pytanie, ale poniżej łatwiej było zastąpić linie zaczynające się od >something do >something_else. Dobry do zmiany nagłówków dla sekwencji fasta

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

    } 
Powiązane problemy