替换内容正则表达式 - Perl(多行)

问题描述 投票:-1回答:2

只有当我抓住Name =“Mario Rossi”时,我该怎样才能取代这个值?

我需要用98代替94

<PMRQ:Name>John Smith</PMRQ:Name>
<PMRQ:PmtId>                                                                    
<PMRQ:InstrId>95</PMRQ:InstrId>                                                 
<PMRQ:EndToEndId>45700100523011712061901541</PMRQ:EndToEndId>                   
</PMRQ:PmtId> 

<PMRQ:Name>Mario Rossi</PMRQ:Name>
<PMRQ:PmtId>                                                                    
<PMRQ:InstrId>94</PMRQ:InstrId>                                                 
<PMRQ:EndToEndId>45700100522011712061901541</PMRQ:EndToEndId>                  
</PMRQ:PmtId> 

感谢帮助!!

regex perl replace
2个回答
1
投票

例如,在xsh你可以写

open file.xml ;
for //PMRQ:Name[.="Mario Rossi"]
    set following-sibling::PMRQ:PmtId[1]/PMRQ:InstrId 98 ;
save :b ;

0
投票

这是有效的,不需要额外的模块。

假设$ text包含您要修改的多行数据。然后就做:

$text=~s/<PMRQ:Name>Mario Rossi<\/PMRQ:Name>\s*<PMRQ:PmtId>\s*<PMRQ:InstrId>\K\d+/98/msg;

最后需要'g'(全局)修饰符来执行多个匹配(但如果你有零个或一个匹配则不会受到伤害)。

© www.soinside.com 2019 - 2024. All rights reserved.