2016-11-10 2 views
4

Я собираю данные из pdf-файла, поэтому я конвертирую pdf в txt и получаю от него данные. Я получаю основную запись в строку, как этот

CARDS 1 GA350C 3 2 0 . 0 450.0 DIGCL R 90 . 0 55.0 2Y 4 4 #

, когда есть только одна запись, а иногда я получаю несколько записей в одну строку, как это, я понял, с символом «#», что есть более чем одна запись в строке

Invite 1 MA300C 3 2 0 . 0 450.0 DIGCL R 9 9 . 0 210.0 6 Y 4 4 #RSVP 1 OFF-90 A 1 3 2 0 . 0 450.0 DIGBH S 9 9 . 0 210.0 6 N 1 0 #Letter1 1 MA130C 3 2 0 . 0 450.0 DIGC L R 29 7 . 0 210.0 2 N 4 0 #Letter1 1 OFF-90 A 1 3 2 0 . 0 450.0 DIGBH S 29 7 . 0 210.0 2 N 1 0 #Envelopes 1 ENVDL E P F S 3 2 0 . 0 450.0 DIGBH S 13 0 . 0 225.0 1 N 1 0 #

В первой строке текущая строка должна нравится

CARDS 1 GA350C 320.0 450.0 DIGCLR 90.0 55.0 2 Y 4 4

Здесь Y стоять Да так этот персонаж когда-нибудь N стоять Нет

Как я могу присоединиться цифры и буквы в порядке, я показал? Она должна независимо от длины строки
работы я использовалОбъединить символы и цифры php

$string = "CARDS 1 GA350C 3 2 0 . 0 450.0 DIGCL R 90 . 0 55.0 2Y 4 4 #"; 
$newstring = preg_replace("/(\d+)\s+(?=\d+)/", "$1", $string); 

но не повезло, кто-нибудь имеет решение, пожалуйста? Спасибо, что просмотрели этот вопрос.

ответ

0

Я бы этого не сделал в одном preg_replace.

Следующий код приведет все странно отформатированные номера в новом формате, например:

$string = "CARDS 1 GA350C 3 2 0 . 0 450.0 DIGCL R 90 . 0 55.0 2 Y 4 4"; 
    preg_match_all("/(\d+\s)+\.\s?0/", $string, $matches); 
    $newNumbers = array_map(
     function ($number) { return str_replace(' ', '', $number); }, 
     $matches[0] 
    ); 
    $newstring = str_replace($matches[0], $newNumbers, $string); 

Результат:

КАРТОЧКИ 1 GA350C 320,0 450,0 DIGCL R 90,0 55,0 2 Y 4 4

+0

Спасибо BVengerov его почти то, что мне нужно, кроме одного. Я не могу найти записи, так что это не проблема, но в вашем демо-уведомлении DIGCL R это одно слово DIGCLR означает DigitalColor, поэтому я могу присоединиться к R с DIGCL? Он не остается таким же. Иногда это DIGBHS или DIGBLW. Спасибо и оцените ваше предложение. –

+0

Не думаю, что я просто заменил DIGCL R на DIGCLR –

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