Что нового

Как осуществить выборку данных по тексту с неодинаковым содержанием переменных?

ckret

Новичок
Сообщения
44
Репутация
0
Подскажите пожалуйста как получить данные из строки, когда исходная строка может меняться.

$stroka = "0254 Хлеб - Дарницкий 0.400 кг. 7.50 грн."
$stroka = "0255 Батон нарезной 6,75 грн."
$stroka = "0256 Хлеб - Азовский 8.05 грн."

Данные для получения : Артикул, Название, Вес(цифры, если он указан) , цена(цифры)

Если бы не вес, думаю с примером опубликованным ниже по ветке все получилось бы достать... (
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Re: Получение данных из строки с помощью регулярного выражения.

Код:
#include 'array.au3'
$stroka = "0254  Хлеб - Дарницкий 0.400 кг. 7.50 грн."
$stroka &= "0255  Батон нарезной 6,75 грн."
$stroka &= "0256  Хлеб - Азовский 8.05 грн."
$str=StringRegExp($stroka,'(\d+)\s+([^0-9]+)(?:\s+|([0-9.,]+)\sкг.\s)([0-9.,]+) грн',3)
_ArrayDisplay($str)
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Re: Получение данных из строки с помощью регулярного выражения.

StringSplit по пробелу разделить.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Re: Получение данных из строки с помощью регулярного выражения.

ckret

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


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"Получение данных из строки с помощью регулярного выражения. " - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Администратор.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Код:
Local $stroka = "0254  Хлеб - Дарницкий 0.400 кг. 7.50 грн."

Local Enum $article = 0, $name, $weight, $price
Local $pattern = '(*UCP)^(\d+)\s*([\w -]+)(?<![ \d,.])\s*(?:([\d,.]+)\s*кг\.)?\s*([\d,.]+)\s*грн'
Local $array = StringRegExp($stroka, $pattern, 1)
If @error Then Exit MsgBox(0,0,'Не подходит по паттерн')

MsgBox(0,'Артикл', $array[$article])
MsgBox(0,'Название', $array[$name])
MsgBox(0,'Вес', $array[$weight])
MsgBox(0,'Цена', $array[$price])
 
Верх