Очистка строки с ошибками пунктуации и пропущенными пробелами - PullRequest
0 голосов
/ 29 марта 2019

Привет, у меня есть следующая строка:


Лев идет (гордо) через Джунгли, но ему не хватает своего Тедди. Очень грустный день! Это тоже Вегетерианский День. Как мы можем помочь ему? Может быть, с Бэмби и хорошей песней! Или с хлебом и маслом; как вы думаете: согласны?

Мне нужно это:

Лев идет (гордо) через Джунгли, но скучает по своему Тедди. 1 очень грустный день! Это тоже день вегетарианца. Как мы можем помочь ему? Может быть, с Бэмби и хорошей песней! Или с хлебом и маслом; Как вы думаете: согласны?


1 и 1 очень должны рассматриваться одинаково.

Я пробовал это:

<?php
$string="TheLion is walking(proudly) through theJungle,but he misses hisTeddy.1very sad day!It is VegeterianDay,too. How can we help him?Maybe withBambi&a good song! Or with bread & butter;What do you think:agree?";
echo trim(preg_replace_callback('~\b\'\b(*SKIP)(*F)|\s*(\p{P}+)\s*~u', function($m) {
    return preg_replace('~\X(?=\X)~u', '$0 ', $m[1]) . ' ';
}, $string)); 
?>

Результат:

Лев идет (гордо) через Джунгли, но скучает по своему Тедди. Очень печальный день! Это тоже VegeterianDay. Как мы можем помочь ему? Может быть, с Бэмби и хорошей песней! Или с хлебом и маслом; Как вы думаете: согласны?


Большое спасибо

1 Ответ

0 голосов
/ 29 марта 2019

Благодаря @Thefourthbird

<?php
$str = "TheLion is walking(proudly) through theJungle,but he misses hisTeddy.1very sad day!It is VegeterianDay,too. How can we help him?Maybe withBambi&a good song! Or with bread & butter;What do you think:agree?";
$re = '/\b(?=[(][A-Za-z])|(?<=[,.!;:?)])\b|(?<=[a-z])(?=[A-Z])|(?<=[a-z]&)|(?=&[a-z])|(?<=[0-9])(?=[a-zA-Z])/m';
$subst = ' ';
$result = preg_replace($re, $subst, $str);
echo $result;
?>

результат:

Лев (гордо) идет через Джунгли, но скучает по своему Тедди.1 очень грустный день!Это тоже день вегетарианца.Как мы можем помочь ему?Может быть, с Бэмби и хорошей песней!Или с хлебом и маслом;Как вы думаете: согласны?

Хороших выходных!

...