我有这样的条目:
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所以每个字符串的开头总是有空格? 是
答案 0 :(得分:1)
你的正则表达式(1)从字符串的开头删除空格。所以它对你的示例字符串没有任何作用。
Reges(2)从字符串的开头删除所有字母数字加上任何后续破折号,返回最后一个短划线后面的内容。
如果两者结合使用,则正则表达式失败,因为没有空格\s+
可以匹配 - 因此整个正则表达式失败。
要解决此问题,只需将空格设为可选。您也不需要将-
括在括号中:
$temp=~ s/^\s*\w+-+//g;
答案 1 :(得分:0)
这应该可以解决问题。
$Str = '
XYZABC------------HGTEZCW
ZERTAE------------RCBCVQE
';
@Matches = ($Str =~ m#^.+-(\w+)$#mg);
print join "\n",@Matches ;
答案 2 :(得分:0)
如果您只需要每个条目的最后七个字符,则可以执行以下操作:
$temp =~ /.{7}$/;