use strict;
my $str = ' <Group id="100">
<Name>generalAlarm_Group01</Name>
<Description>Group General Alarm 01</Description>
<Type>poll</Type>
<Content multipleGet="true">
<Param>100</Param>
<Param>101</Param>
<Param>103</Param>
<Param>104</Param>
<Param>120</Param>
<Param>121</Param>
</Content>
</Group>
<Group id="110">
<Name>generalConfig_Group01</Name>
<Description>Group General Config 01</Description>
<Type>poll</Type>
<Content multipleGet="true">
<Param>105</Param>
<Param>106</Param>
<Param>107</Param>
<Param>108</Param>
<Param>109</Param>
<Param>110</Param>
<Param>111</Param>
<Param>112</Param>
<Param>113</Param>
</Content>
</Group>
<Group id="1000">
<Name>firstPriorityAlarmConfig_Group1000</Name>
<Description>First Priority Alarm Config Table - Group 1000</Description>
<Type>poll</Type>
<Content multipleGet="true">
<Param>1000</Param>
</Content>
</Group>
<Group id="2000">
<Name>secondPriorityAlarmConfig_Group2000</Name>
<Description>Second Priority Alarm Config Table - Group 2000</Description>
<Type>poll</Type>
<Content multipleGet="true">
<Param>2000</Param>
</Content>
</Group>
<Group id="3000">
<Name>thirdPriorityAlarmConfig_Group3000</Name>
<Description>Third Priority Alarm Config Table - Group 3000</Description>
<Type>poll</Type>
<Content multipleGet="true">
<Param>3000</Param>
</Content>
</Group>';
my $regex = qr/(<Group id="\d+">\n\t\t\t<Name>)(\w+)_(\w+)(<\/Name>\n\t\t\t<Description>)([\w+\s]+)\s-\s([\w+\s]+)(<\/Description>)/mp;
my $subst = '$1$3_$2$4$6 - $5$7';
my $result = $str =~ s/$regex/$subst/rg;
print "The result of the substitution is' $result\n";
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Perl, please visit: http://perldoc.perl.org/perlre.html