2012-09-14 38 views
0

我需要在由\n分隔的一些句子中間添加一個字符串。 例如:perl正則表達式匹配一個字符串並在其旁邊添加一個字符串

INPUT   OUTPUT 
V2+count -> V2+came+count 
V6+num  -> V6+came+num 
V10+hi+town -> V10+came+hi+town 

N2+hello -> N2+went+hello 
N7+time  -> N7+went+time 

我寫了到目前爲止的代碼是

if ($new=~/\(came\)\|\(went\)/) { 
    my $prev_tag = $`; 
    if ($prev_tag5=~ /\(V\d+?\)?\+$/) { 
     $new=~ s/\(came\)\|//; 
    } else { 
     $new=~s/\(went\)\|//; 
    } 
} 
+0

所有的正則表達式包括文字括號,但是你提供的例子母鹿不包括任何括號,所以他們不會匹配你的任何正則表達式。 – pmakholm

+0

你應該如何選擇在一個特定情況下添加'came'或'went'? – raina77ow

+0

數據**(1)**令牌分隔符中的「+」字符 - 事實上,您正在處理一系列字符串或**(2)**空格,您只是想強調它們,或者* *(3)**輸入/輸出中的文字加'+'字符?我有點困惑。 – amon

回答

4

我的建議是保持簡單,不要試圖在並行處理這兩種情況。因此,通過增加開始「來」到所有匹配/V\d+/的情況下,然後添加「去」到所有的情況匹配/N\d+/

$new =~ s/(V\d+\+)/$1came+/; 
$new =~ s/(N\d+\+)/$1went+/; 
+0

儘管可讀性較差,但可以使用'r'修飾符在一行上執行兩個替換:'$ new = $ new =〜s /(V \ d + \ +)/ $ 1came +/r =〜s/(N \ d + \ +)/ $ 1went +/r;' – Kenosis

+0

更可讀,但仍然是一行:'$ new =〜s /(V \ d + \ +)/ $ 1came + /; $ new =〜s /(N \ d + \ +)/ $ 1went + /;' – pmakholm

相關問題