Здравствуйте. Такая проблема. В первой колонке находится текст, который отличается только содержимым utm_content. Во второй колонке каждая ячейка содержит повторяющийся несколько раз параметр utm_content. Вопрос: как сменить в каждой ячейке второй колонки содержимое utm_content так, чтобы оно соответствовало этому параметру в левой ячейке?
Здравствуйте. Такая проблема. В первой колонке находится текст, который отличается только содержимым utm_content. Во второй колонке каждая ячейка содержит повторяющийся несколько раз параметр utm_content. Вопрос: как сменить в каждой ячейке второй колонки содержимое utm_content так, чтобы оно соответствовало этому параметру в левой ячейке?Mitya
Function MyFirstRegExp(cell_from$, cell_to$) With CreateObject("VBScript.RegExp") .Global = True .IgnoreCase = True .Pattern = "&utm_content.*?&" Set m = .Execute(cell_from) txt = m.Item(0).Value MyFirstRegExp = .Replace(cell_to, txt) End With End Function
[/vba] [p.s.]Начал изучать регулярные выражения.Этот код моя первая проба пера Regexp. С удовольствием выслушаю критику и замечания по коду
Вариант функцией пользователя. [vba]
Код
Function MyFirstRegExp(cell_from$, cell_to$) With CreateObject("VBScript.RegExp") .Global = True .IgnoreCase = True .Pattern = "&utm_content.*?&" Set m = .Execute(cell_from) txt = m.Item(0).Value MyFirstRegExp = .Replace(cell_to, txt) End With End Function
[/vba] [p.s.]Начал изучать регулярные выражения.Этот код моя первая проба пера Regexp. С удовольствием выслушаю критику и замечания по кодуsboy
Вчера руки не дошли - Сергей, можно чутка короче: [vba]
Код
Function MyFirstRegExp2(cell_from$, cell_to$) With CreateObject("VBScript.RegExp") .Global = True .IgnoreCase = True .Pattern = "&utm_content[^&]+&" txt = .Execute(cell_from)(0) MyFirstRegExp2 = .Replace(cell_to, txt) End With End Function
[/vba]
Вчера руки не дошли - Сергей, можно чутка короче: [vba]
Код
Function MyFirstRegExp2(cell_from$, cell_to$) With CreateObject("VBScript.RegExp") .Global = True .IgnoreCase = True .Pattern = "&utm_content[^&]+&" txt = .Execute(cell_from)(0) MyFirstRegExp2 = .Replace(cell_to, txt) End With End Function
buchlotnik, Спасибо Михаил! Мог бы объяснить в чем принципиальное отличие твоего паттерна (оптимальность, производительность, "правильность")? Т.к. я еще их "читать" не умею, пользуюсь сайтом помощником для их составления
buchlotnik, Спасибо Михаил! Мог бы объяснить в чем принципиальное отличие твоего паттерна (оптимальность, производительность, "правильность")? Т.к. я еще их "читать" не умею, пользуюсь сайтом помощником для их составленияsboy
В данном случае ничего принципиального нет. По скорости функции идентичны. Мне вариант с исключающим набором кажется более понятным ("последовательность НЕ амперсандов", вместо "последовательность символов до амперсанда в нежадном варианте"), но это субъективное. Объективно нужно помнить, что наши функции могут дать разные результаты, если в ячейке присутствуют разрывы строки (символ 10) - потому что точка, это всё, кроме разрыва строки; а НЕ амперсанд - это всё, кроме амперсанда (т.е. включая разрывы) UPD на всякий случай - MSDN
В данном случае ничего принципиального нет. По скорости функции идентичны. Мне вариант с исключающим набором кажется более понятным ("последовательность НЕ амперсандов", вместо "последовательность символов до амперсанда в нежадном варианте"), но это субъективное. Объективно нужно помнить, что наши функции могут дать разные результаты, если в ячейке присутствуют разрывы строки (символ 10) - потому что точка, это всё, кроме разрыва строки; а НЕ амперсанд - это всё, кроме амперсанда (т.е. включая разрывы) UPD на всякий случай - MSDNbuchlotnik
Сообщение отредактировал buchlotnik - Среда, 23.08.2017, 13:24