Regex (¿mirar hacia atrás?)

Regex (¿mirar hacia atrás?)

Necesito convertir esto:

zz  zz zz   zzzzYzzzzXzzzz zz     zzzzzz                zzzz zzYzz

dentro de esto:

1Y1X1Y1

Preferiblemente de una sola vez.

zz\s*zzes bueno pero necesitas ejecutarlo varias veces para lograr lo que necesito.

El par es la unidad mínima de z.

zz están separados entre sí por cualquier número y combinación de espacios en blanco (tabulaciones, espacios).

X e Y pueden ser cualquier cadena excepto z y espacios en blanco.

Los espacios en blanco siempre están delimitados por zz (y están dentro de las cadenas Y y X).

Sería mejor si estuviera en una sintaxis compatible con VBA.

Respuesta1

Puedes hacerlo en GNU sed con

sed -r 's/[z ]+/1/g'

Si eso no es lo que desea, edite su pregunta para describir lo que desea con mayor claridad.

Respuesta2

El código VBA se parecería al siguiente código:

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

Aquí está el resultado de este ejemplo ejecutado en Word:

ingrese la descripción de la imagen aquí

información relacionada