особенности регулярных выражений excel vba
Имеется исходная строка типа "Лист АМг6.М S ГОСТ 21631-76; HxL". Необходимо найти символы "SDHL" для последующей замены на фактические значения. Для такого поиска использую регулярное выражение "[\sx][DSLH][\sx]|$", которое правильно находит "S" и "Hx", но вместо "xL" выдает "". Пожалуйста, подскажите, в чем моя ошибка? Думаю, что после нахождения "Hx" надо дать указание сдвинуть позицию начала поиска "xL" на один символ влево, но как? Спасибо
Ответы (2 шт):
Sub test1()
tmp = "Лист АМг6.М S ГОСТ 21631-76; HxL"
s = 1
h = 50
l = 100
tmp = Replace(Replace(tmp, " S ", Format(s, "\ 0.0\ ")), "HxL", h & "x" & l)
Debug.Print tmp
End Sub
Лист АМг6.М 1,0 ГОСТ 21631-76; 50x100
Алексей, Вы правы, не полностью сформулированная задача приводит к ошибочным решениям. Я это обязательно учту, спасибо Вам. На самом деле на листе EXcel присутствует не только приведенное обозначение, но и "Труба Д16.Т.КР DxS ОСТ1 92096-83; L", "Пруток Д16ч.Т.КР D ОСТ1 90395-91; L" и т. п., т. е. вариантов взаимного сочетания символов "DSHL" достаточно много. Фактические значения находятся в таблице на поле чертежа CATIA. Задача сводится к нахождению символов в обозначении материалов и поиску их фактических значений в таблице чертежа. С учетом информации Станислава решение теперь выглядит так:
Dim reg_str As String, reg_obj As Object, exec_obj As Object
reg_str = "[\sx][DSLH]([\sx]|$)"
title_mat = Replace(title_mat, "x", "x ")
Set reg_obj = Utils.RegExpExecute(title_mat, reg_str)
For Each exec_obj In reg_obj
spec_letter = Trim(Replace(exec_obj, "x", ""))
'... поиск фактического значения fact_size в таблице чертежа, CATIA VBA
title_mat = Replace(Replace(title_mat, spec_letter, fact_size), "x ", "x")
Next exec_obj