![]() |
Модераторы: diadiavova, gambit |
![]() ![]() ![]() |
|
error0x40 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 14.2.2012 Репутация: нет Всего: нет |
Примеры строк:
1. Type ( "Name 1" ) 2. Engine( Name ) 3. Class ( Name Folder ) 4. Wagon ( "Name" "Folder") 5. Discrete_Trigger ( 53 PlayOneShot ( 2 File ( "Name" -1 ) File ( "Name2" -1 ) SelectionMethod ( RandomSelection ) ) ) На выходе нужно получить следующее 1. "Name 1" 2. Name 3. Name Folder 4. "Name" "Folder" 5. "Name" "Name2" Все корректно работает кроме 5 позиции: "Name" -1 "Name2" -1 SelectionMethod ( RandomSelection Приведу код самой функции
Подскажите пожалуйста, что именно упустил из виду? П.С. Приветствуются любые альтернативные варианты на PB. Это сообщение отредактировал(а) error0x40 - 17.6.2013, 17:49 |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 1 Всего: 454 |
1) Вложенные скобки (вернее, они должны соответствовать друг другу в паттерне) 2) Набор символов, который не может быть в составе подстроки (возможно, в определённой позиции, напр. не начинаться xc цифры или дефиса) 3) Специальные подстроки, требующие исключения Как я понимаю, в 5-м примере должно получиться "Name" "Name2" RandomSelection? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Достаточно сложно советовать, в силу того, что ты не объяснил саму задачу. Из примеров, конечно же, можно кое-что понять, но полной ясности все-таки нет. Мне вообще вариант с заменой части паттерна кажется немного странным, особенно если учесть, что само выражение у тебя предельно простое, я предполагаю, что можно все вместить в один паттерн и ничего не заменять. Например, если т.н. аргумент состоит из известных символов, то можно его просто описать регуляркой. В случае, если он может состоять из любых символов, то регулярка вообще может накрыться. Поэтому надо бы ввести какое-то ограничение. Например, во всех твоих примерах то, что ты назвал аргументом состоит из алфавитно-цифровых символов и подчеркиваний. Ну это ведь можно описать простейшей регуляркой \w+. Если тебе надо выбрать содержимое скобок, то тут тоже все предельно просто и такая регулярка будет выглядеть так [^\(\)]+. Ну и далее аналогично, то есть надо точно сформулировать правила отбора, а потом уже сочинять регулярку. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
error0x40 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 14.2.2012 Репутация: нет Всего: нет |
Akina
на выходе следовало получиться: "Name" "Name2" diadiavova
Как синтаксически грамотно описать РВ - вот в чем загвоздка. Ладно на время забудем, что аргументы могут быть разными. Критерии выбора подстроки: 1.Начало подстроки - слово(Argument) + пробел со скобкой/скобка (Например: 'Argument (' либо 'Argument(' ) 2. "В середине подстроки" могут присутствовать символы алфавита, цифры и символы: / \ . _ - " (пробел) 2.Конец подстроки - пробел с закрывающей скобкой Вот код рабочии, но необходимо оптимизировать
Не понятно следующее как сделать, что бы поиск соответствовал выше описанным критерия, но при это критерии начала и конца игнорировались оставалось лишь значение? Т.е. как описать в одном РВ так, что бы из строки например "Argument ( "\Value_.0" ) получить только "\Value_.0" Есть еще такая вот трактовка: Как объединить действия 7 и 11 строки в одну. Это сообщение отредактировал(а) error0x40 - 18.6.2013, 18:16 |
||||
|
|||||
diadiavova |
|
||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Означает ли это, что оно состоит только из алфавитно-цифровых символов? Если да, то вполне подойдет \w+ . Допустим. Тогда не очень понятно, каким образом из пятого варианта получится представленный тобой результат. В частности меня интересует, куда делись подстроки "-1" (дважды) и "RandomSelection". Кроме того, интересно, следует ли объединять все полученные результаты в одну строку, как это у тебя описано в варианте 5. Ведь "Name" и "Name2" находятся не рядом. Так вообще по описанному получается примерно следующее
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
||||
|
|||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 1 Всего: 454 |
Не понимаю, чем они лучше RandomSelection -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
error0x40 |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 14.2.2012 Репутация: нет Всего: нет |
Используется конкретное слово(Argument), т.е. \w в данном случае не подойдет. Если обратить внимание на вот это строчку, том можно увидеть где выражение " -1" удаляется из результата:
А насчет 5-го результата то вот строки отвечающие за вывод 2-х значений
Во это, что мне нужно было, про группы я забыл т.к. давно не работал с PB. Спасибо Символ \s тоже не подходит так как в подстроке встречается только пробел. Кстати проверил мой старый код с использование стандарных функции и новый написаный с помощь РВ. Вот результат: Простые функции С использование РВ По времени(Tick) одинаковое Количество срок кода 45 23 Это сообщение отредактировал(а) error0x40 - 18.6.2013, 18:08 |
||||||||
|
|||||||||
diadiavova |
|
||||||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Насколько я понял, ему нужны не все вхождения текста в скобках, а только те, которым предшествует конкретный аргумент.
Ну почему не подойдет? А если так?
Если обратить, то конечно, только когда задаешь вопрос наверно как-то неправильно вынуждать тех, кто готов помочь, угадывать что тебе надо по коду, который к тому же еще и работает не так как надо. Все-таки проблему надо сформулировать словами, а код обычно служит для пояснения.
Ну его заменить пробелом тоже не проблема. Можно просто пробел ставить, но это не подойдет, если установить флажок IgnorePatternWhitespaces. В примере выше я использовал более универсальный подход.
Если ты не приводишь самих тестов и что тестировал, то эти результаты вообще ни о чем не говорят. Они просто непонятны. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
||||||||
|
|||||||||
error0x40 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 14.2.2012 Репутация: нет Всего: нет |
Всем спасибо.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума VB .NET | |
|
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | VB .NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |