В общем, шаблон для определения дефисов между буквами и цифрами, действительный для механизмов регулярных выражений, поддерживающих как lookbehinds, так и lookaheads, имеет вид
(?<=\d)-(?=[A-Za-z])|(?<=[A-Za-z])-(?=\d)
(?<=\d)
- это положительный lookbehind, который соответствует местоположению, непосредственно предшествующемус цифрой (?<=[A-Za-z])
- это вид сзади, который соответствует местоположению, которому предшествует буква, (?=[A-Za-z])
положительный взгляд требует, чтобы буква появлялась сразу после текущей позиции, а (?=\d)
требует цифры.
Чтобы удалить все дефисы между буквами и цифрами в коде VBA, используйте
(\d)-(?=[A-Za-z])|([A-Za-z])-(?=\d)
Замените на $1$2
в качестве строки замены.
См. Демонстрационный пример regex
Положительные взгляды заменяются группами захвата, а заполнители $1
/ $2
(обратные ссылки для замены) ссылаются на значения, сохраненные в соответствующих подсовпадениях.
Вам по-прежнему нужны заголовки для включения перекрытиясовпадения и, к счастью, регулярное выражение VBA на основе поддержки более старой версии скрипта ECMAts lookaheads.
Пример кода :
Dim objRegExp As Object
Set objRegExp = CreateObject("vbscript.regexp")
objRegExp.Global = True
objRegExp.Pattern = "(\d)-(?=[A-Za-z])|([A-Za-z])-(?=\d)"
text = objRegExp.Replace(text, "$1$2")