Мне нужно это повернуть:
zz zz zz zzzzYzzzzXzzzz zz zzzzzz zzzz zzYzz
в это:
1Y1X1Y1
Желательно одним махом.
zz\s*zz
это хорошо, но вам нужно запустить его несколько раз, чтобы добиться того, что мне нужно.
Пара — минимальная единица z.
zz отделяются друг от друга любым количеством и комбинацией пробелов (табуляции, пробелы).
X и Y могут быть любыми строками, кроме z и пробелов.
Пробелы всегда ограничены символами zz (и находятся внутри строк Y и X).
Было бы лучше, если бы синтаксис был совместим с VBA.
решение1
Вы можете сделать это в GNU sed с помощью
sed -r 's/[z ]+/1/g'
Если это не то, что вам нужно, отредактируйте свой вопрос, чтобы более четко описать то, что вы хотите.
решение2
Код VBA будет выглядеть примерно так, как показано ниже:
Sub test()
MsgBox ReplaceIt("zz zz zz zzzzYzzzzXzzzz zz zzzzzz zzzz zzYzz")
End Sub
Function ReplaceIt(strIn As String) As String
Dim RE As Object
Set RE = CreateObject("VBScript.RegExp")
RE.Pattern = "[z ]+"
RE.Global = True
ReplaceIt = RE.Replace(strIn, "1")
End Function
Вот результат этого примера, запущенного в Word: