在perl regex中动态搜索和替换

时间:2014-09-03 07:25:04

标签: regex perl

$string = "On 0 8 February 2 0 1 4 , he visited the fair";

我想替换数字之间的空格,因此它变为"On 08 February 2014, he visited the fair"

如何使用正则表达式执行此操作?我可以通过索引执行for循环索引,但是如果给出大量文本,它将会很慢。

这是我想要实现的目标:

$string =~ s/([0-9]\s)+/substr($string,$-[0],$+[0]-$-[0])/g;

但它不起作用,因为substr不被视为正则表达式中的函数。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

您可以使用后视,并展望过滤此类空间,

$string =~ s/[0-9]\K [ ]+ (?=[,0-9])//xg;

答案 1 :(得分:0)

试试这段代码:

do{
    $string =~s/(\d+)\s+(\d+)/$1$2/g;
} while($string =~/(\d+)\s+(\d+)/);

答案 2 :(得分:0)

您还可以尝试以下正则表达式 $string =~ s/(?<=\d)\s+(?![a-z])//ig;