Tengo una lista exportada desde otra aplicación. Los resultados se devuelven con caracteres adicionales entre ellos.
Lo que consigo:
Mary One;#123;#Bob Two;#2345;#Charles Three;#445
Lo que quiero:
Mary One; Bob Two; Charles Three
El número de usuarios que podrían aparecer en la celda no es consistente. El factor de complicación adicional es que los números varían entre 3 y 4 caracteres.
Estoy tratando de evitar que esto se vuelva muy complicado. Idealmente, esta sería una fórmula que comunicaría al resto de mi departamento para usar según sea necesario.
Voy a usar SUBSTITUTE y LEN, pero podría necesitar ayuda para mantenerlo limpio.
Respuestas:
Voy a presentar aquí un par de opciones para elegir, pero todas ellas se basan en expresiones regulares. Es posible no usar expresiones regulares, pero creo que podría requerir un poco más de tiempo.
[Opción 1 - https://regex101.com/]
Visite la página https://regex101.com/
Establezca el sabor en 'pcre (php)' - es la opción predeterminada
Expresión regular:
(?<=;)(#\d+;#)|(;#\d+$)
Bandera:g
Cadena de prueba:
Mary One;#123;#Bob Two;#2345;#Charles Three;#445
Sustitución:
// un espacio (o puede dejarse en blanco)
Salida:
Mary One; Bob Two; Charles Three
la salida debe recortarse ya que hay un espacio adicional al final.
[Opción 2 - LibreOffice Calc (portátil)]
La ventana 'Buscar y reemplazar' de Calc permite usar expresiones regulares.
Ctrl + H
Buscar:
(?<=;)(#\d+;#)|(;#\d+$)
Reemplazar con: un espacio o en blanco
En la sección 'Otras opciones' marque 'Expresiones regulares'
Haga clic en el botón 'Reemplazar todo'.
[Opción 3 - Notepad ++]
Estoy mencionando N ++ aquí ya que es una herramienta realmente poderosa mientras trabajo con muchos tipos de textos. Su poder se encuentra en gran medida en numerosos complementos. Pero aquí me referiré a una ventana Reemplazar estándar. Regex permite dividir las partes coincidentes del texto. Se llama agrupación. Cada grupo puede tener un nombre y ese nombre puede usarse en el reemplazo.
Ctrl + H → Reemplazar pestaña
Ajustar: marcado
Modo de búsqueda: Expresión regular
Buscar:
(?'name_surname'[^;#]+\s[^;#]+;)(#\d+(;#|$))
Reemplazar con:
$+{name_surname}
Haga clic en el botón 'Reemplazar todo'
Significado:
'Buscar qué' encuentra todo: el texto deseado y no deseado.
'Reemplazar con' reemplaza el texto sin formato con solo partes deseadas.
[Opción 4 - Excel - función definida por el usuario (VBA)]
Abra el editor de Visual Basic (Alt + F11)
Agregue referencia:
Herramientas -> Referencias -> Expresiones regulares de Microsoft VBScript 5.5
[Resumen]
Traté de concentrarme en soluciones bastante rápidas pero totalmente funcionales, así que supongo que se puede sacar algo de eso.
fuente
Expr = "(#\d+;#?)|(;#\d+$)"
. La nueva expresión todavía funciona con las cadenas anteriores. Si encontró algunos escenarios más negativos, lo más probable es que la causa raíz se encuentre en la expresión regular, pero afortunadamente esto se puede cambiar fácilmente.Intenté la fórmula. No fue lindo. Sin embargo, estoy seguro de que hay otras formas de hacerlo.
Esta fórmula tomará su cadena en la celda A1 y eliminará las cadenas
#123
y#2345
. Siempre puede ampliar la técnica aún más si lo desea. Encuentra las ocurrencias de "#" y luego divide la cadena en pedazos más pequeños.No es limpio ni fácil de comunicar.
Sugiero una función definida por el usuario. Aquí hay un artículo que explica cómo configurar y distribuir una función de usuario. Pruebe el UDF y si tiene preguntas sobre el proceso, por favor pregunte.
fuente