
Un montón de funciones de caracteres JMP aparecieron en un Publicación anterior : longitud, substr, contiene, etc. Son geniales para las cosas sencillas, y tú pudo haz cosas difíciles con ellos si quisieras. Pero Regex podría ser mejor.
Regex, abreviatura de Expresión regular , es una poderosa función JSL para manipular texto.
result = regex( sourceText, searchPattern, replaceTemplate, options );
(Hay otras dos funciones en JSL con Regex en su nombre; por ahora solo mire vainilla "regex". Es el que desea, especialmente si lo está usando en una fórmula de columna).
Esta es una introducción muy incompleta a las expresiones regulares (pero una descripción razonablemente completa de la función regex de JMP). Puede encontrar muchos tutoriales para expresiones regulares en la web; La expresión regular de JMP patrones de búsqueda son similares a las expresiones regulares de Perl.
los patrón de búsqueda es la expresión regular y describe el texto que se va a encontrar. los reemplazar Plantilla describe cómo se reemplazará el texto coincidente y puede usar bits del texto coincidente en la plantilla. Los siguientes ejemplos usan una cadena literal (entre comillas) para el primer argumento, para mayor claridad, pero una variable que contiene el texto de origen casi siempre tendría más sentido.
regex( "123 456 789", "[0-9]*")
"123"
Este ejemplo tiene dos argumentos, texto de origen y patrón de búsqueda . El patrón de búsqueda usa corchetes para crear un conjunto de caracteres. El atajo de guión especifica un rango. Puede usar [a-zA-Z] para hacer un conjunto de todos los caracteres ASCII en mayúsculas y minúsculas. El asterisco (*) significa "repetir el patrón anterior cero o más veces". \d es un atajo para el conjunto de todos los dígitos.
regex( "123 456 789", "\d*")
"123"
Un conjunto de caracteres como [0123456789] se puede negar comenzando con un sombrero: [^0123456789] coincide con cualquier carácter que no sea un dígito. Algunos de los atajos como \d se pueden representar como un juego de caracteres:
| \w |
[a-zA-Z0-9_] |
caracteres de palabras |
| \W |
[^a-zA-Z0-9_] |
no caracteres de palabras |
| \d |
[0-9] |
dígitos |
| \D |
[^0-9] |
no dígitos |
| \s |
[\t\v\f] |
el espacio en blanco incluye tabulación, retorno, nueva línea, tabulación vertical y salto de página |
| \S |
[^\t\v\f] |
no espacios en blanco |
Todos los accesos directos anteriores coinciden con un solo carácter . Puedes agregar el asterisco
\s*
para hacer coincidir una racha de cero o más caracteres de espacio en blanco. O bien, puede agregar un más
\D+
para hacer coincidir una racha de uno o mas caracteres que no son dígitos. O bien, puede agregar un signo de interrogación
\w?
hacer coincidir cero o uno caracteres de palabras
El asterisco, el signo más y el signo de interrogación son operadores de repetición y son codicioso . Codiciosos significa que capturan la mayor cantidad de texto posible y luego retroceden si es necesario. Pueden volverse reacios agregando un signo de interrogación. Generalmente codicioso es el comportamiento que desea, pero no siempre.
Paréntesis, referencias posteriores y reemplazar Plantilla
Mucho del poder en regex proviene de la interacción entre el patrón de búsqueda y el reemplazar Plantilla . La interacción se crea mediante el uso de referencias anteriores, representadas como \0, \1, \2, ... El valor predeterminado de replaceTemplate es "\0". La referencia anterior \0 es el texto completo que coincidió. Los paréntesis se utilizan en expresiones regulares para agrupar partes de un patrón para formar patrones más grandes. Por ejemplo
regex( "cat dog catog cadog cat dog", "cat|dog", "***", GLOBALREPLACE)
"*** *** *** registro ca *** *** ***"
regex( "cat dog catog cadog cat dog", "ca(t|d)og", "***", GLOBALREPLACE)
"gato perro *** *** gato perro"
La barra vertical separa alternativas y tiene muy poca precedencia; el segundo ejemplo usa paréntesis para agrupar la t o la d. los reemplazar Plantilla es solo texto constante, ***. Pero cada paréntesis abierto comienza con una nueva referencia anterior, y las referencias anteriores se pueden usar en la plantilla:
regex( "cat dog catog cadog cat dog", "ca(t|d)og", " \1 ", GLOBALREPLACE)
"gato perro t d gato perro"
GLOBALREPLACE hace que la expresión regular busque y reemplace todas las coincidencias; el patrón coincide con catog o cadog. La referencia posterior es t o d, porque esa es la parte del patrón dentro de los paréntesis. La plantilla agrega algunos espacios alrededor del valor \1 y luego la plantilla se sustituye por cada catog o cadog coincidente.
Se pueden usar múltiples pares de paréntesis, tanto anidados como en secuencia. Simplemente cuente los paréntesis abiertos para encontrar el número de referencia posterior.
Fórmula de tabla de datos
Aquí está el ejemplo de apellido, nombre usando expresiones regulares.
Column formula using regex() Fórmula de columna usando regex()
Este ejemplo usa los anclajes ^ y $ (subrayados en verde). ^ coincide con el principio de la cadena y $ coincide con el final de la cadena. \w* coincide con cero o más caracteres de palabra.Este ejemplo puede ser demasiado simple; no manejará nombres con caracteres especiales o espacios en blanco. Puede volver a trabajarlo para dividirlo en comas usando referencias anteriores: Regex(nombre, "([^,]*)", "\1") y Regex(nombre, "\s*([^,]*)$", "\1") quizás."([^,]*)" significa cero o más caracteres que no son comas y "\s*([^,]*)$" significa omitir cero o más espacios, mantener todas las comas y estar al final. En el "([^,]*)" caso \1 y \0 son iguales. Pero en "\s*([^,]*)$", \0 puede tener espacios iniciales que \1 no tiene porque \s* está fuera de los paréntesis de \1.
Hay mucho más en las expresiones regulares, bien descrito en otra parte de la web (busque regex). Y el ejemplo de Alice y Jerry en el índice de secuencias de comandos también es bastante bueno, si está desconcertado sobre cómo se pueden usar las referencias anteriores.
Siguiente: funciones de coincidencia de patrones.
Actualización 29 de enero de 2017: formato reparado para la nueva comunidad.