2014-09-03 4 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 loop по индексу, но при большом количестве текста он будет медленным.

Это идея о том, что я пытаюсь достичь:

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

, но это не будет работать, так как подстрока не рассматривается в качестве функции в регулярном выражении. Есть идеи?

ответ

3

Вы можете использовать оглядываться и смотреть вперед, чтобы фильтровать такие пробелы,

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

я сделал это $ string = ~ s/[0-9] \ K [] + (? = [[: punct:] 0-9]) // xg; – Jean

0

Попробуйте этот код:

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

Вы также можете попробовать следующее регулярное выражение $string =~ s/(?<=\d)\s+(?![a-z])//ig;

Смежные вопросы