结合字符和数字php

时间:2016-11-10 03:57:14

标签: php string preg-replace

我正在从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代表否

如何以我展示的方式加入数字和字母?无论字符串长度如何都必须工作
我用过

$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);

但没有运气,有人有解决方案吗?感谢您查看此问题。

1 个答案:

答案 0 :(得分: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);

结果:

  

CARDS 1 GA350C 320.0 450.0 DIGCL R 90.0 55.0 2 Y 4 4