Удалить пробелы между цифрами, разделёнными запятой или точкой
Буэнос диас, сеньоры и сеньориты!
У меня возник вопрос о том, как составить регулярное выражение, чтобы решить задачу:
в тексте удалить пробелы только между цифрами, разделёнными запятой или точкой.
Пример:
Шпага продаётся за 629, 56 руб. в магазине у дона Педро.
или
Шпага продаётся за 629. 56 руб. в магазине у дона Педро.
Результат:
Шпага продаётся за 629,56 руб. в магазине у дона Педро.
и, соответственно
Шпага продаётся за 629.56 руб. в магазине у дона Педро.
Как должно выглядеть выражение
$text = str_replace(?????????????????????????, $text);
$replacement = "$1,$2";
$text = preg_replace($pattern, $replacement, $text);
$pattern = "/(\d+)\.\s+(\d+)/i";
$replacement = "$1.$2";
$text = preg_replace($pattern, $replacement, $text);
Вот это работает отлично!
Снимаю шляпу, господа!
Спасибо большое!!!
$text = str_replace(', ', '.', $text);
Мне надо производить замену только между числами (между цифрами)!
$text = preg_replace('/([^\s]?)\s?([.,?!:;])\s?([^\s]?)/u', "\$1\$2 \$3", $text);
$text = preg_replace('[,\\s(?=\d)]',',', preg_replace('[(?<=\d)\s]', '', $text));
Как быть с точкой?
$text = preg_replace('[\s,(?=\d)]', ',', preg_replace('[(?<=\d),\s]', ',', $text));
что-то такое приходит на ум
$text = "Шпага продаётся за 629, 56 руб. в магазине у дона Педро. Шпага продаётся за 629. 56 руб. в магазине у дона Педро.";
$pattern = "/(\d+),\s+(\d+)/i";
$replacement = "\${1},\${2}";
$text = preg_replace($pattern, $replacement, $text);
$pattern = "/(\d+)\.\s+(\d+)/i";
$replacement = "\${1}\.\${2}";
$text = preg_replace($pattern, $replacement, $text);
попробуйте, может подойдёт
$pattern = "/(\d+),\s+(\d+)/i";
$replacement = "\$1,\$2";
$text = preg_replace($pattern, $replacement, $text);
$pattern = "/(\d+)\.\s+(\d+)/i";
$replacement = "\$1\.\$2";
$text = preg_replace($pattern, $replacement, $text);
У меня " кавычки выводятся как "
Долго морочился.
Так как очень много текста попадается с разными вариациями ошибок, например:
ООО " Аленький цветочек"
ООО" Аленький цветочек "
ООО "Аленький цветочек "
ООО "ТД" Аленький цветочек"
и т.д. и т.п.
Перепробовал множество вариантов регулярных выражений, в том числе и на этом, предлагающий выход когда требуется вывод вот такой конструкции:
«ТД «Авангард»
$datatext=preg_replace_callback(
'#(([\"]{2,})|(?![^\W])(\"))|([^\s][\"]+(?![\w]))#u',
function ($matches) {
if (count($matches)===3) return "«»";
else if ($matches[1]) return str_replace('"',"«",$matches[1]);
else return str_replace('"',"»",$matches[4]);
},
$datatext
);
но остановился на этом, своём изобретении:
$text = preg_replace("/([^\s>])\"/s","$1»", preg_replace("/\"([^\s])/s","«$1", $text));
$text = preg_replace("/([^\s>])\s\"/s","$1»", preg_replace("/\"\s([^\s])/s","«$1", $text));
Вроде работает...
Немного переделал, но ошибка вылезла в другом месте.
ххх = preg_replace("/\"([^\s])/s", "«$1", preg_replace("/([^\s>])\"/s","$1»", ххх));
ххх= preg_replace("/\"\s([^\s])/s", "«$1", preg_replace("/([^\s>])\s\"/s","$1»", ххх));