0

我有这个输入:

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

我怎么能在正则表达式中做到这一点?

4

2 回答 2

0
$result =~ s/\.G\d+V\d+//g;

适用于给定的输入。

于 2012-05-04T16:27:23.277 回答
0

更新:

在评论中讨论后,最终的解决方案是:

s/\.G\w+V\w+$//;

在您的正则表达式中:

s/\.G.*V.*$//g;

那些.*是贪婪的,会尽可能匹配。您唯一的要求是某处必须有 a V.G因此它会从找到的第一个字符串开始截断字符串.G,只要它后面跟着 a V。这里不需要/g修饰符,因为发生的任何匹配都会删除字符串的其余部分。除非你有换行符,因为.没有/s修饰符不匹配换行符。

于 2012-05-04T16:32:42.013 回答