假设我的文件包含如下所示的行:
"7sunrIsEfoo"
"10ecological09"
"3bedtime"
每一行以数字(s)开头,代表数字n。我想匹配它后面的n个字符。输出应为:
sunrIsE
ecological
bed
有没有办法使用正则表达式执行此操作?我的第一次尝试是:
([0-9]*)[a-zA-Z]{\1}
但它似乎不起作用。
答案 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