powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Найти геометрические размеры из строки
5 сообщений из 5, страница 1 из 1
Найти геометрические размеры из строки
    #37879142
В очень длинных строках записаны геометрические размеры продукции в виде " толщинаХширинаХдлинаММ ". Пытаюсь найти ее регуляркой, но получается масса дополнительных символов (пример ниже). Подскажите как побороть. Заранее благодарен.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Public Function regularVolume(str As String)
    Dim objRegExp As Object
    Set objRegExp = CreateObject("VBScript.RegExp")
    objRegExp.Global = True
    objRegExp.Pattern = "[^0-9Х0-9Х0-9ММ]"
    regularVolume = objRegExp.Replace(str, "")
End Function



Пример выдачи. Нужно только выделенное. Пример на короткую строку, а в реальности строки, найденные регэкспом, очень длинные и могут содержать паразитные подстроки, типа указания одного линейного размера, например " 180ММ " или площади " 180Х1700ММ ".
Код: vbnet
1.
0     1  1   16Х2800Х2070ММ  480 278208


Понятно, что можно в найденном искать другими методами (сплитом, инстр), но хотелось бы сразу в регэкспе.
...
Рейтинг: 0 / 0
Найти геометрические размеры из строки
    #37879152
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квадратные скобки означают набор символов, а не последовательность. Крыжик впереди инвертирует набор. [^0-9Х0-9Х0-9ММ] = [^0-9ХМ], то есть все символы кроме цифр, Х и М.

\d+X\d+X\d+MM
...
Рейтинг: 0 / 0
Найти геометрические размеры из строки
    #37879169
Antonariy, попробовал Ваш вариант на сравнительно коротком тестовом примере (всего-то около 700 символов, а есть и по 8000 символов). Исходная строка:
"ПЛИТЫ ДРЕВЕСНОВОЛОКНИСТЫЕ СУХОГО СПОСОБА ПРОИЗВОДСТВА (МДФ), СОРТ 1, ЛАМИНИРОВАННЫЕ, 1 СТОРОНА- РАЗМЕР 16Х2800Х2070ММ (ЦВЕТ-БЕЛЫЙ) -270ШТ, 1564,92 КВ.М. ИЗГОТОВЛЕНЫ ИЗ ДРЕВЕСНОГО ВОЛОКНА СУХИМ МЕТОДОМ СМ. ДОПОЛНЕНИЕ ПРЕССОВАНИЯ С ИСПОЛЬЗОВАНИЕМ ТЕМПЕРАТУРЫ ДО 280 ГРАД. И ВЫСОКОГО ДАВЛЕНИЯ. СРЕДНЕЙ ПЛОТНОСТИ - 750-760 КГ/М КУБ. ИСПОЛЬЗУЮТСЯ ДЛЯ ПРОИЗВОДСТВА МЕБЕЛИ. КОД ОКП - 55 3600. ТУ У 20.2-35255146-001:2010.: КАЖДАЯ ПАЧКА УСТАНАВЛИВАЕТСЯ НА ДЕРЕВЯННЫЕ БРУСКИ. ВЕРХ ПАЧКИ УКРЫВАЕТСЯ ГОФРОКАРТОНОМ 2800Х2070 ММ, НИЗ ПАЧКИ - ПРОКЛАДОЧНЫЙ ЛИСТ ИЗ НЕКОНДИЦИОННОЙ ПЛИТЫ МДФ. ПАЧКА СТЯГИВАЕТСЯ ТРЕМЯ ПОПЕРЕЧНЫМИ ПОЯСАМИ ИЗ ПЭТ ЛЕНТЫ."

Ваш вариант дает:
ПЛИТЫ ДРЕВЕСНОВОЛОКНИСТЫЕ СУХОГО СПОСОБА ПРОИЗВОДСТВА (МДФ), СОРТ 1, ЛАМИНИРОВАННЫЕ, 1 СТОРОНА- РАЗМЕР 16Х2800Х2070ММ (ЦВЕТ-БЕЛЫЙ) -270ШТ, 1564,92 КВ.М. ИЗГОТОВЛЕНЫ ИЗ ДРЕВЕСНОГО ВОЛОКНА СУХИМ МЕТОДОМ СМ. ДОПОЛНЕНИЕ ПРЕССОВАНИЯ С ИСПОЛЬЗОВАНИЕМ ТЕМПЕРАТУРЫ ДО 280 ГРАД. И ВЫСОКОГО ДАВЛЕНИЯ. СРЕДНЕЙ ПЛОТНОСТИ - 750-760 КГ/М КУБ. ИСПОЛЬЗУЮТСЯ ДЛЯ ПРОИЗВОДСТВА МЕБЕЛИ. КОД ОКП - 55 3600. ТУ У 20.2-35255146-001

Начальный вариант (мой)
Х М 1 М 1 М 16Х2800Х2070ММ 270 156492 М ХМ ММ М М М 280 750760 М М 55 3600 20235255146001

А нужно " 16Х2800Х2070ММ "
...
Рейтинг: 0 / 0
Найти геометрические размеры из строки
    #37879405
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно поменять не только маску, но и метод:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Dim objRegExp As Object 'переменная модуля,
                        'чтобы не создавать объект каждый раз при вызове функции

Public Function regularVolume(str As String)
    If objRegExp Is Nothing Then
        Set objRegExp = CreateObject("VBScript.RegExp")
        objRegExp.Pattern = "\d+Х\d+Х\d+ММ"
    End If
    With objRegExp.Execute(str)
        If .Count > 0 Then regularVolume = .Item(0)
    End With
End Function
...
Рейтинг: 0 / 0
Найти геометрические размеры из строки
    #37879488
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Казанский, спасибо, получилось. Рецепт тот же, что и у Antonariy. Но сам я применил его невежественно. С вашими попраками все получилось
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Найти геометрические размеры из строки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]