假设我有一个文件,其中包含如下所示的行:
"7sunrIsEfoo"
"10ecological09"
"3bedtime"
每行以代表数字 n 的数字开头。我想匹配它后面的 n 个字符。输出应该是:
sunrIsE
ecological
bed
有没有办法使用正则表达式来做到这一点?我的第一次尝试是:
([0-9]*)[a-zA-Z]{\1}
但它似乎不起作用。
使用正则表达式是不可能的。
([0-9]*)
只是将数字“记住”为子字符串:它们不能以数字形式使用。
在 Ruby 中,您可以使用:
result = string[/(\d+)([a-zA-Z]+)/,2][0,$1.to_i]
它会给你预期的结果。
正则表达式不太适合此任务。他们没有建立解释数字的方法。您可以使用(凌乱的)解决方法
(?<=1).|(?<=2)..|(?<=3)...|
以此类推(虽然你最好使用相反的顺序,否则到11时你会遇到问题)。请注意,除非您真的没有其他方法,否则您不应该使用此方法=)
这是在 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