Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2012, 16:24   #1
Meta2
Пользователь
 
Регистрация: 28.10.2009
Сообщений: 38
По умолчанию Разработка регулярного выражения для извлечения артикулов товаров

Всем доброго дня!

Прошу помощи в создании регулярного выражения для разбора массива строк с артикулами товаров, примерно такого вида:
A2J74ES#ACB
XT335EA-B21
QB056EA#ACB_

От регулярного выражения требуется:
1. Пропускать строки, похожие на указанные (см. выше)
2. В случае, если строка оканчивается на символы "_DEMO", "_NC1", "_NC2", выражение должно генерировать пустую строку.

A2J74ES#ACB -> A2J74ES#ACB
XT335EA-B21 -> XT335EA-B21
QB056EA#ACB_ -> QB056EA#ACB_
A2J74ES#ACB_DEMO -> ""
A2J74ES#ACB_NC1 -> ""

3. Если строка содержит символы "->", выражение также должно возвращать пустую строку.
Meta2 вне форума Ответить с цитированием
Старый 21.03.2012, 16:44   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Вот моя любимая страница
Творите.
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 21.03.2012, 17:23   #3
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Временные меры: функция (кто бы мог подумать!) InStr

Теперь, doober, и не только ваша.

В документе Word искомые строки пожирает мой
Код:
Sub Чистильщик()
Dim k, s
    Selection.HomeKey wdStory ' курсор - в начало док. Word
    'заменим сначала все разрывы строк на знак абзаца
    Selection.Find _
    .Execute "^l", replacewith:="^p", Replace:=wdReplaceAll
    
    With ActiveDocument.Paragraphs 'идём по строкам, они же абзацы
        For k = 1 To .Count
            With .Item(k).Range 'работаем с k-й строкой
    '        .Select 'это выделение абзаца k; для пошаговых испытаний
            s = .Text 'текст очередного абзаца
                
                If InStr(s, "_DEMO") Then .Text = Chr(13) 'делаем пустую строку* (абзац)
                If InStr(s, "_NC1") Then .Text = Chr(13)
                If InStr(s, "_NC2") Then .Text = Chr(13)
                If InStr(s, "->") Then .Text = Chr(13)
                If InStr(s, "- >") Then .Text = Chr(13) 'на случай лишнего пробела
            '*если вообще удалять строку (убирать абзац) - сложнее выход из цикла
            End With
        Next
    End With
End Sub
Я буквально за 40 минут набил и отладил, так что не высший класс ☺☻☺
Изображения
Тип файла: jpg рыба.jpg (49.0 Кб, 124 просмотров)
Sasha_Smirnov вне форума Ответить с цитированием
Старый 21.03.2012, 17:43   #4
Meta2
Пользователь
 
Регистрация: 28.10.2009
Сообщений: 38
По умолчанию

Цитата:
Сообщение от Sasha_Smirnov Посмотреть сообщение
[поскипано]
...Я буквально за 40 минут набил и отладил, так что не высший класс
Спасибо за помощь, но это, знаете ли, понятно... Пройтись по строкам, потом сравнить их с неким шаблоном, отбросить те, которые не нужны. Это очень просто и реализуется хоть на чём.

Ладно, буду ковырять регэксп...
Meta2 вне форума Ответить с цитированием
Старый 21.03.2012, 18:37   #5
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Ладно, вернусь с БАМа... тоже вас удивлю!
Sasha_Smirnov вне форума Ответить с цитированием
Старый 21.03.2012, 21:02   #6
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Цитата:
От регулярного выражения требуется:
1. Пропускать строки, похожие на указанные (см. выше)
2. В случае, если строка оканчивается на символы "_DEMO", "_NC1", "_NC2", выражение должно генерировать пустую строку.
Цитата:
Спасибо за помощь, но это, знаете ли, понятно... Ладно, буду ковырять регэксп...
RegExp не может сам по себе "пропускать" и "генерировать". Он может:
- Находить вхождения по шаблону в тексте (метод Execute);
- Проверять текст на вхождение шаблона (метод Test);
- Заменять вхождения шаблона на заданную строку (метод Replace).

В данном случае, когда строки-критерии четко определены, применение RegExp не дает никаких преимуществ.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование регулярных выражений для извлечения части строки Meta2 Microsoft Office Excel 4 04.09.2011 18:18
Корректность Регулярного выражения Altera Свободное общение 4 18.08.2011 17:44
скрипт для извлечения определенной информации с сайта Student Glebka Помощь студентам 1 10.05.2011 11:23
Ищу программу для извлечения данных firebolt Помощь студентам 1 05.02.2011 15:23
Процедура для извлечения ресурса foxes Общие вопросы Delphi 3 02.05.2010 20:02