我有这个输入:
AB2.HYNN.KABCDSEG.L000.G0001V00
AB2.HYNN.GABCDSEG.L000.G0005V00
我想删除字符串中GXXXXVXX
完成的所有内容。
当我使用此代码时:
$result =~ s/\.G.*V.*$//g;
print "$result \n";
结果是:
AB2.HYNN.KABCDSEG.L000
AB2.HYNN
每次正则表达式找到".G"
时,它都会被删除。
我不明白。
我想有这个:
AB2.HYNN.KABCDSEG.L000
AB2.HYNN.GABCDSEG.L000
我如何在正则表达式中执行此操作?
答案 0 :(得分:0)
$result =~ s/\.G\d+V\d+//g;
适用于给定的输入。
答案 1 :(得分:0)
<强>更新强>
在评论中谈到后,最终的解决方案是:
s/\.G\w+V\w+$//;
在你的正则表达式中:
s/\.G.*V.*$//g;
那些.*
贪婪且会尽可能匹配。您唯一的要求是V
之后必须有一个.G
,因此它会截断它找到的第一个.G
字符串,只要它跟着一个V
。这里不需要/g
修饰符,因为发生的任何匹配都将删除字符串的其余部分。除非您有换行符,否则.
与没有/s
修饰符的换行符不匹配。