Содержимое соответствия между искаженным нумерованным списком (1., 2., 3. и т. Д.), Regex - PullRequest
0 голосов
/ 01 февраля 2019

Работа с этой сумасшедшей строкой, которая является преобразованием из PDF в текстовый фреймворк.

Я опубликую ее в конце, но, вероятно, здесь легче расшифровать: https://regex101.com/r/DxXupz/1

Я выяснил, как сопоставить содержимое между 1. и 2., используя это регулярное выражение:

1\.(.*?)2\.

Но, как вы можете видеть, $string, с которым я имею дело, имеет все виды чисел идесятичные числа и тому подобное, вплоть до 11.

Существует ли решение регулярного выражения для захвата всех нумерованных списков в одном запросе функции preg_match_all, т. е. (пример с приведенным выше регулярным выражением для 1.на 2.):

preg_match_all('/1\.(.*?)2\./s', $string, $matches);

Чтобы вернуть содержимое с 1. до 2., 2. до 3. и т. д.?

$string = "1. CZ243 96V DC   

20
0pcs  


11.35U
SD            220
.
00
USD


2
”

,74mm/s 


25lbs .

2.

CV243 96V DC  

10
0pcs  


11.35USD            1135
.00
USD  


4
”

,74mm/s


25lbs

3
. CV243 96V DC   

150pcs         12.20
U
SD           1830.00
USD


6
”

,74mm/s   


25lbs .

4. CV243 96V DC  

100
pcs        13.50
1USD            1350.00
USD


8
”

,74mm/s 


25lbs .

5
. CV243 96V DC 

50
pcs    

15.00USD     

750.00
USD


10
”

,74mm/s 


25lbs .

6. CV243 96V DC   

200pcs 

15.00USD    

3000.00
USD


12
”

,74mm/s 


25lbs .

7
. CV243 96V DC  


50pcs 


16.00USD           800.00
USD


14
”

,74mm/s 


25lbs .

8. CV243 96V DC   

75pcs         16.50
USD



1237.50
USD


16
”

,74mm/s 


25lbs .

9. CV243 96V DC               
5
0pcs 


18.46USD           
923.00
USD


18
”

,74mm/s 


25lbs .


10.CV243 96V DC               
50pcs 


18.46USD 

923.00
USD


20
”

,74mm/s 


25lbs .


11. 
CV243 96V DC               
5
0pcs 


20.77USD           1038.50
USD


24
”

,74mm/s 


25lbs .


";

1 Ответ

0 голосов
/ 01 февраля 2019

Это регулярное выражение должно дать вам нужные результаты:

\d+\s*\.\s*(CV243 96V DC.*?)(?=\d+\s*\.\s*CV243 96V DC|$)

Он ищет несколько цифр, за которыми необязательно следует пробел, точку, возможный пробел и строку CV243 96V DC.Затем он захватывает все символы до следующего вхождения начального шаблона или конца строки (утверждается с использованием положительного взгляда, чтобы символы не были захвачены в этом совпадении).В PHP:

preg_match_all('/\d+\s*\.\s*(CV243 96V DC.*?)(?=\d+\s*\.\s*CV243 96V DC|$)/s', $string, $matches);
print_r($matches[1]);

Вывод несколько запутанный, поэтому я не буду повторять все это здесь, но вы можете увидеть это в действии в этой демонстрации .Вот первые два значения:

[0] => CV243 96V DC 20 0pcs 11.35U SD 220 . 00 USD 2 ” ,74mm/s 25lbs . 
[1] => CV243 96V DC 10 0pcs 11.35USD 1135 .00 USD 4 ” ,74mm/s 25lbs 

Примечание

Я предположил, что ваши данные должны начинаться с 1. CV243, а не 1. CZ243.Если он должен начинаться с 1. CZ243, и вы все еще хотите его перехватить, измените CV243 в регулярном выражении на C[VZ]243.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...