2014-09-03 79 views
1
$string = "On 0 8 February 2 0 1 4 , he visited the fair"; 

我想更換號碼之間的空間,所以它成爲"On 08 February 2014, he visited the fair"搜索和在Perl的正則表達式動態替換

我怎樣才能做到這一點與正則表達式?我可以按索引做一個for循環索引,但是如果給出大量的文本,它會很慢。

這是我想要實現一個想法:

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

但由於SUBSTR不作爲正則表達式中的一個函數處理它不會工作。有任何想法嗎?

回答

3

您可以使用向後看,並展望過濾這樣的空間,

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

我做這個$ string =〜s/[0-9] \ K [] +(?= [[:punct:] 0-9])// xg; – Jean 2014-09-03 07:54:22

0

試試這個代碼:

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

您還可以試試下面的正則表達式 $string =~ s/(?<=\d)\s+(?![a-z])//ig;