0

我有这样的条目:

    XYZABC------------HGTEZCW
    ZERTAE------------RCBCVQE

我只想得到 HGTEZCW 和 RCBCVQE 。我想使用一个通用的正则表达式。

$temp=~ s/^\s+//g;     (1)
$temp=~ s/^\w+[-]+//g; (2)

如果我使用 (1) + (2) ,它可以工作。我得到了它的工作原理:HGTEZCW,然后RCBCVQE......

我想知道是否可以在一行中做到这一点:

$temp=~ s/^\s+\w+[-]+//g; (3)

当我使用(3)时,我得到了这个结果:XYZABC------------HGTEZCW

我不明白为什么不能在一行中连接 1 + 2。

对不起,我的条目是:

    XYZABC------------HGTEZCW
    ZERTAE------------RCBCVQE

此外,正则表达式 1 删除了空间,但是当我使用 regex2 时,它删除了 XYZABC------------ 。但是组合(3)不起作用。我有这个XYZABC------------HGTEZCW

@Tim所以每个字符串的开头总是有空格吗?是的

4

3 回答 3

1

您的正则表达式 (1) 从字符串的开头删除空格。所以它对您的示例字符串没有任何作用。

Reges (2) 删除字符串开头的所有字母数字加上任何后面的破折号,返回最后一个破折号后面的任何内容。

如果将两者结合起来,正则表达式会失败,因为没有空格\s+可以匹配 - 因此整个正则表达式都会失败。

要解决此问题,只需将空格设为可选。此外,您不需要将-括号括起来:

$temp=~ s/^\s*\w+-+//g;
于 2012-05-09T09:24:07.573 回答
0

这应该可以解决问题。

$Str = '
    XYZABC------------HGTEZCW
    ZERTAE------------RCBCVQE
';

@Matches = ($Str =~ m#^.+-(\w+)$#mg);

print join "\n",@Matches ;
于 2012-05-09T10:19:22.393 回答
0

如果您只需要每个条目的最后七个字符,则可以执行以下操作:

$temp =~ /.{7}$/;
于 2012-05-09T12:12:37.460 回答