0

示例数据:

029提取这个特定的字符串。不要捕捉其他任何东西。

在上面的示例中,我想在定义 n 值的 3 位输入之后立即捕获前 n 个字符。IE 的 29 个字符“提取此特定字符串”。

我可以在一个循环中做到这一点,但它很慢。我想(如果可能的话)使用某种反向引用来使用单个正则表达式语句来实现这一点。就像是:

(\d{3})(.{\1})
4

3 回答 3

1

使用 perl,您可以:

my $str = '029Extract this specific string. Do not capture anything else.';
$str =~ s/^(\d+)(.*)$/substr($2,0,$1)/e;
say $str;

输出:

Extract this specific string.
于 2013-03-22T12:37:31.670 回答
0

你确定你需要一个正则表达式吗?

来自https://stackoverflow.com/tags/regex/info

傻瓜冲进天使不敢踏足的地方

现代正则表达式的强大功能和表现力可以诱使容易上当或鲁莽的人尝试在遇到的每一个与字符串相关的任务中使用正则表达式。一般来说,这是一个坏主意,...

这是一个Python三行代码:

foo = "029Extract this specific string. Do not capture anything else."
substr_len = int(foo[:3])
print foo[3:substr_len+3]

这是一个PHP三行代码:

$foo = "029Extract this specific string. Do not capture anything else.";
$substr_len = (int) substr($foo,0,3);
echo substr($foo,3,substr_len+3);
于 2013-03-22T12:35:17.963 回答
0

您不能使用单个正则表达式来做到这一点,而您可以使用正则表达式停止处理的知识来使用 substr。例如在 JavaScript 中你可以做这样的事情http://jsfiddle.net/75Tm5/

var input = "blahblah 011I want this, and 029Extract this specific string. Do not capture anything else.";
var regex = /(\d{3})/g;
var matches;
while ((matches = regex.exec(input)) != null) {
    alert(input.substr(regex.lastIndex, matches[0]));
}

这将返回两行:

I want this
Extract this specific string.

根据您真正想要的,您可以修改正则表达式以仅匹配从行开头开始的数字,仅匹配第一个匹配项等

于 2013-03-22T12:48:00.163 回答