3

假设我有一个文件,其中包含如下所示的行:

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

每行以代表数字 n 的数字开头。我想匹配它后面的 n 个字符。输出应该是:

sunrIsE
ecological
bed

有没有办法使用正则表达式来做到这一点?我的第一次尝试是:

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

但它似乎不起作用。

4

4 回答 4

4

使用正则表达式是不可能的。

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

于 2011-05-20T09:25:14.457 回答
2

在 Ruby 中,您可以使用:

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

它会给你预期的结果。

于 2011-05-20T09:32:30.667 回答
0

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

(?<=1).|(?<=2)..|(?<=3)...| 

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

于 2011-05-20T09:30:33.340 回答
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
于 2011-05-20T09:53:02.680 回答