正则表达式匹配之前已解析过的数量的字符

时间:2011-05-20 09:23:13

标签: regex character digits

假设我的文件包含如下所示的行:

"7sunrIsEfoo"
"10ecological09"
"3bedtime"

每一行以数字(s)开头,代表数字n。我想匹配它后面的n个字符。输出应为:

sunrIsE
ecological
bed

有没有办法使用正则表达式执行此操作?我的第一次尝试是:

([0-9]*)[a-zA-Z]{\1}

但它似乎不起作用。

4 个答案:

答案 0 :(得分:4)

正则表达式无法做到这一点。

([0-9]*)只是“记住”数字作为子字符串:它们不能以数字方式使用。

答案 1 :(得分:2)

在Ruby中,您可以使用:

result = string[/(\d+)([a-zA-Z]+)/,2][0,$1.to_i]

它会给你预期的结果。

答案 2 :(得分:0)

正则表达式不适合此任务。他们没有建立解释数字的方法。 您可以使用

来使用(杂乱的)解决方法
(?<=1).|(?<=2)..|(?<=3)...| 

等等(虽然你最好使用相反的顺序,否则你到达11时会遇到问题)。请注意,您不应该使用此方法,除非您真的没有其他方式=)

答案 3 :(得分:0)

以下是在Perl中执行此操作的方法:

#!/usr/local/bin/perl
use strict;
use warnings;

my @list = ("7sunrIsEfoo", "10ecological09", "3bedtime");
foreach(@list) {
    s/^(\d+)(.+)$/substr($2, 0, $1)/e;
    print $_,"\n";
}

<强>输出:

sunrIsE
ecological
bed