Regex для объединения чисел, когда между ними есть пробелы - PullRequest
3 голосов
/ 03 августа 2011

Я пытаюсь построить регулярное выражение, которое объединяет числа в строку, когда между ними есть пробелы, например:

$string = "I want to go home 8890 7463 and then go to 58639 6312 the cinema"

Регулярное выражение должно вывести:

"I want to go home 88907463 and then go to 586396312 the cinema"

Регулярное выражение может быть на языке Python или PHP.

Спасибо!

Ответы [ 2 ]

10 голосов
/ 03 августа 2011

Используйте упреждающий просмотр, чтобы увидеть, является ли следующий блок набором чисел, и удалите завершающий пробел.Таким образом, он работает для любого количества наборов (что, я подозреваю, вам может понадобиться):

$string = "I want to go home 8890 7463 41234 and then go to 58639 6312 the cinema";

$newstring = preg_replace("/\b(\d+)\s+(?=\d+\b)/", "$1", $string);
// Note: Remove the \b on both sides if you want any words with a number combined.
// The \b tokens ensure that only blocks with only numbers are merged.

echo $newstring;
// I want to go home 8890746341234 and then go to 586396312 the cinema
3 голосов
/ 03 августа 2011

Python:

import re
text = 'abc 123 456 789 xyz'
text = re.sub(r'(\d+)\s+(?=\d)', r'\1', text)  # abc 123456789 xyz

Это работает для любого количества последовательных числовых групп с любым интервалом между ними.

...