Jajajajaja no amigo, no es cuestión de gusto lo que ocurre es que si acepto algo como mejor
(que es el caso que vos propones) necesito interpretarlo para aprender y las RE si pasa de esto [\b] ya me cuesta,
Te explico la más difícil:
patron = r"\A\d{3}(?=[^\d])|(?<=[^\d])\d{3}(?=[^\d])|(?<=[^\d])\d{3}$"
El patron captura lo siguiente:
\A = comienzo de cadena de texto
\d{3} = Tres dígitos
(?=[^\d]) = Finaliza con algo que no sea un número [^\d].
Pero no lo tiene en cuenta a la hora de capturar el final de la cadena (?= )
| = o captura lo siguiente
(?<=[^\d]) = comienza con algo que no sea un dígito
Pero no lo tiene en cuenta a la hora de capturar el inicio de la cadena (?<= )
\d{3} = Tres dígitos
(?=[^\d]) = Finaliza con algo que no sea un número [^\d].
Pero no lo tiene en cuenta a la hora de capturar el final de la cadena (?= )
| = o captura lo siguiente
(?<=[^\d]) = comienza con algo que no sea un dígito
Pero no lo tiene en cuenta a la hora de capturar el inicio de la cadena (?<= )
\d{3} = Tres dígitos
$ = Final de la cadena de texto
Si es demasiado complicado, el otro programa te da también la solución que buscas.
Saludos.