
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
04.02.2006, 09:07:34
|
|||
|---|---|---|---|
Есть ли в формулах Excel регулярные выражения? |
|||
|
#18+
Добрый день! Подскажите, пожалуйста, есть ли возможность задавать в ячейках Excel 2003 формулы с регулярными выражениями? Насколько я в курсе, регулярные выражения можно испоьлзовать в макросах. Если так, то можно ли како-то их "вытащить" для использования в ячейках? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.02.2006, 09:14:02
|
|||
|---|---|---|---|
Есть ли в формулах Excel регулярные выражения? |
|||
|
#18+
регулярные выражения - это что? типа конструкции With что ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.02.2006, 11:32:50
|
|||
|---|---|---|---|
Есть ли в формулах Excel регулярные выражения? |
|||
|
#18+
vkodorрегулярные выражения - это что? типа конструкции With что ли? Регулярное выражение regex В данном конкретном случае мне нужно выкусить из строки кусок по маске. Но хотелось бы выяснить этот вопрос в целом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.02.2006, 14:14:32
|
|||
|---|---|---|---|
Есть ли в формулах Excel регулярные выражения? |
|||
|
#18+
это подайдёт? ПОИСК(искомый_текст;текст_для_поиска;нач_позиция) ПОИСКБ(искомый_текст;текст_для_поиска;нач_позиция) Искомый_текст — это искомый текст. Можно использовать символы шаблона знак вопроса (?) и звездочка (*) в аргументе искомый_текст. Знак вопроса соответствует любому символу; звездочка соответствует любой последовательности символов. Если нужно найти символ знак вопроса или звездочку, то следует поставить перед ними знак тильда (~). Если искомый_текст не найден, то возвращается значение ошибки #ЗНАЧ!. Текст_для_поиска — это текст, в котором нужно найти искомый_текст. Нач_позиция — это номер символа в тексте текст_для_поиска, с которого следует начать поиск. Если аргумент опущен, то он полагается равным 1. Если нач_позиция не больше 0 или больше, чем длина аргумента текст_для_поиска, то возвращается значение ошибки #ЗНАЧ!. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.02.2006, 15:10:11
|
|||
|---|---|---|---|
Есть ли в формулах Excel регулярные выражения? |
|||
|
#18+
vkodorэто подайдёт? нет, не пойдет. нужен поиск по сложному шаблону из латинских букв, цифр и пробелов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.02.2006, 15:26:20
|
|||
|---|---|---|---|
Есть ли в формулах Excel регулярные выражения? |
|||
|
#18+
miksoft vkodorэто подайдёт? нет, не пойдет. нужен поиск по сложному шаблону из латинских букв, цифр и пробелов. наверно только VBA Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.02.2006, 19:26:44
|
|||
|---|---|---|---|
Есть ли в формулах Excel регулярные выражения? |
|||
|
#18+
miksoftНасколько я в курсе, регулярные выражения можно испоьлзовать в макросах. Если так, то можно ли како-то их "вытащить" для использования в ячейках?Ну никто ж не запрещает сделать публичную функцию :) Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.02.2006, 11:25:30
|
|||
|---|---|---|---|
Есть ли в формулах Excel регулярные выражения? |
|||
|
#18+
White OwlНу никто ж не запрещает сделать публичную функцию :) и после этого эту функцию можно будет использовать в формалах в ячейках? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.02.2006, 18:21:31
|
|||
|---|---|---|---|
Есть ли в формулах Excel регулярные выражения? |
|||
|
#18+
miksoft White OwlНу никто ж не запрещает сделать публичную функцию :) и после этого эту функцию можно будет использовать в формалах в ячейках? Да конечно. Пишешь =MyMatch(A1, "a*b") и получаешь TRUE/FALSE (или ИСТИНА/ЛОЖЬ для русского Экселя) если текст в ячейке A1 начинается на a и кончается на b. Подробно используемый вариант регулярных выражений описан в доке на wsh. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.02.2006, 19:27:19
|
|||
|---|---|---|---|
Есть ли в формулах Excel регулярные выражения? |
|||
|
#18+
White OwlДа конечно. Пишешь =MyMatch(A1, "a*b") Спасибо большое! вот ведь... век живи - век учись! сколько лет с Excel-ем дружу, а такой вещи не знал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.02.2006, 12:12:52
|
|||
|---|---|---|---|
|
|||
Есть ли в формулах Excel регулярные выражения? |
|||
|
#18+
White Owl miksoftНасколько я в курсе, регулярные выражения можно испоьлзовать в макросах. Если так, то можно ли како-то их "вытащить" для использования в ячейках?Ну никто ж не запрещает сделать публичную функцию :) Код: plaintext 1. 2. 3. 4. 5. а так можно ? Public Function MyMatch(r As Range, s As String) As Boolean MyMatch = r.text like s End Function ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.02.2006, 14:12:45
|
|||
|---|---|---|---|
Есть ли в формулах Excel регулярные выражения? |
|||
|
#18+
MX -- ALEX White Owl miksoftНасколько я в курсе, регулярные выражения можно испоьлзовать в макросах. Если так, то можно ли како-то их "вытащить" для использования в ячейках?Ну никто ж не запрещает сделать публичную функцию :) Код: plaintext 1. 2. 3. 4. 5. а так можно ? Public Function MyMatch(r As Range, s As String) As Boolean MyMatch = r.text like s End Function Public Function MyMatch(r As Range, s As String) As Boolean MyMatch = r.Cells(1, 1).Text Like s End Function ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2006, 09:00:36
|
|||
|---|---|---|---|
Есть ли в формулах Excel регулярные выражения? |
|||
|
#18+
Для использования регулярных выражений в своих программах, необходимо подключить библиотеку Microsoft Windows Script. Такая библиотека поставляется с IE4 (и выше). Для подключения, зайдите в Project->References и поставьте флажок у VBScript Regular Expressions. Теперь к Visual Basic добавился объект RegExp, который содержит в себе все, что нужно для работы с регулярными выражениями. Как использовать объект объект RegExp? Для начала, необходимо объявить объектную переменную RegExp: Dim myRegExp As New RegExp Этот объект имеет следующие свойства и методы: Свойства: Global - если Global = True, то поиск ведётся во всей строке, если False, то только до первого совпадения. IgnoreCase - игнорировать ли регистр символов при поиске. Pattern - это свойство задаёт шаблон (маску) для поиска. MultiLine - определяет, является ли текст многострочным или нет. Методы: Test - этот метод имеет следующий синтаксис: Function Test(sourceString As String) As Boolean Метод Test позволяет протестировать строку sourceString на соответствие её шаблону (Pattern). Возвращается Boolean, True - соответсвует, False - нет. Execute - этот метод имеет следущий синтаксис: Function Execute(sourceString As String) As MatchCollection MatchCollection - это коллекция совпадений, которая содержит в себе всю информацию о всех совпадениях регулярного выражения в строке sourceString. Метод Execute может быть использован, например, для извлечения всех email адресов из строки sourceString. Replace - этот метод имеет следующий синтаксис: Function Replace(sourceString As String, replaceVar) _ As String Метод Replace даёт возможность заменить все совпадения регулярного выражения строкой replaceVar. Примеры использования регулярных выражений Dim myRegExp As New RegExp ' создаём экземпляр RegExp'a myRegExp.MultiLine = False ' текст однострочный myRegExp.Global = True ' будем проходить всю строку myRegExp.IgnoreCase = True ' игнорируем регистр символов myRegExp.Pattern = "<BODY (.*)</BODY>" ' маска Dim aMatch As Match ' один из совпавших образцов Dim colMatches As MatchCollection ' коллекция этих образцов Dim testString As String ' тестируемая строка testString = "<HTML><BODY bgcolor=#FFAABB>" & _ "<P>Это пример</P></BODY></HTML>" ' текст для теста Set colMatches = myRegExp.Execute(testString) ' запускаем! For Each aMatch In colMatches ' проходим по всей коллекции List1.AddItem aMatch.FirstIndex List1.AddItem aMatch.Length List1.AddItem aMatch.SubMatches(0) List1.AddItem aMatch.Value Next aMatch В результате выполнения такого кода в ListBox (List1) добавятся вот такие строчки: Первая - число 6 (FirstIndex) - это номер первого совпавшего символа (т.е. симола b) Вторая строка - 46 (Length) - длина совпавшего образца. Третья строка: "bgcolor=#FFAABB><P>Это пример</P>". Это первый совпавший образец (\1), т.е. текст, попавший в скобки (.*) в маске. Для \2 нужно смотреть SubMatches(1) и т.д. И последняя строка: "<BODY bgcolor=#FFAABB><P>Это пример</P></BODY>" - полный образец. Теперь, давайте, к примеру, изменим маску (регулярное выражение) так, чтобы из текста получить hex цвет (#XXXXXX). Маска может выглядить так: "(#[0-9A-F]{6})" Запустите и посмотрите что будет. Свойство SubMatches(0) вернёт вам строку - "#FFAABB", т.е. как раз то, что мы искали. Кстати, свойство Value вернёт вам такую же строку. Рассмотрим пример использования метода Test: Dim myRegExp As New RegExp myRegExp.MultiLine = False myRegExp.Global = True myRegExp.IgnoreCase = True myRegExp.Pattern = "(#[0-9A-F]{6})" testString = "<HTML><BODY bgcolor=#FFAABB>" & _ "<P>Это пример</P></BODY></HTML>" If myRegExp.Test(testString) Then MsgBox "Совпала!" Else MsgBox "Не совпала." End If Здесь мы проверяем, совпала ли строка с регулярным выражением или нет. И наконец, последний пример. Давайте заменим текст, находящийся в тегах <P> на другой текст: myRegExp.Pattern = "<P>(.*?)</P>" testString = "<HTML><BODY bgcolor=#FFAABB>" & _ "<P>Это пример</P></BODY></HTML>" List1.AddItem myRegExp.Replace(testString, _ "<P>Новый текст в теге P!</P>") В данном случае в тестируемой строке будет только одна пара <P></P>. Но вы можете сами добавить ещё одну пару и проверить работоспособность кода. Синтаксис регулярных выражений На эту тему была выпущена книга "Mastering Regular Expressions". Более подробное описание вы можете найти на специализированных сайтах. (www.perl.com, к примеру). Спец. символы: Символ Назначение * Множитель. Определяет ни одного или несколько символов, стоящих перед ним. Пример: "ab*c" - символ a, затем ни одного или несколько символов b, и символ c. . Точка - любой одиночный символ, кроме символа новой строки. Например: "a." - символ a, за который следует любой одиночный символ. [] Скобки использутся для задания класса символов. Например: "[0-9A-F]" - соответствует одному hex символу. Заметьте, что 9-0 использовать нельзя! Символы должны идти обязательно по возрастающей. [^] Класс отрицания. Например: "[^A-Z]" - соответствует любому символу, крому любой заглавной латинской буквы. \w Любой буквенно-циферный символ. Фактически аналог класса: "[a-zA-Z0-9_]" \W Аналог "[^a-zA-Z0-9_]" \d Любая цифра: "[0-9]". Например "\d\d\.\d\d\.\d\d\d\d" - соответствует дате. Заметьте, что перед точкой нужно поставить обратную косую черту \. Это говорит о том, что точку мы хотим интерпретировать именно как точку, а не как спец. символ - точку. \D Аналог "[^0-9_]". Т.е. всё, кроме цифр. \s Пробельный символ "[ \r\t\n\f]". \S Непробельный символ "[^ \r\t\n\f]". + Тоже множитель (как и *), но определяет один или более символов. Например: "ab+c" - символ a, один или более символов b и затем символ c. ? Прожорливость. Например, выше, для замены текста внутри тегов <p> мы использовали следующую маску: "<P>(.*?)</P>". После * мы поставили знак вопроса. Если бы мы этого не сделати, что произошла бы замена всего того, что находится от первого тега <p> до последнего </p>. А так, происходит замена только до следующего тега. Ещё несколько примеров регулярных выражений: "(два|три) богатыря" соответствует как строке "два богатыря", так и "три богатыря". ".+@.+\..+" - соответствует email адресу. "a(.)\1c" - соответствует одному символу a, затем любым 2-м одинаковым символам, и затем символу с. Т.е. совпадёт "axxc", то не "axyc". "(\d\d)\.\1\.\d\d\d\d" - соответствует дате, у которой число и месяц одинаковы. Т.е. дата "09.09.2001" - подойдёт, а дата "09.12.2001" - нет. Ну и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2006, 09:18:10
|
|||
|---|---|---|---|
|
|||
Есть ли в формулах Excel регулярные выражения? |
|||
|
#18+
Ух-ты...... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=61&mobile=1&tid=2185247]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
42ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 193ms |
| total: | 297ms |

| 0 / 0 |
