\1\1\1\1\1
La función JSL REGEX expresión regular tiene un argumento de formato que por defecto es "\0". \0 es la referencia posterior a todo el texto coincidente.
sentence = "the quick brown fox jumped over the lazy dog";
regex( sentence, "\w{6,6}", "\0"); // look for exactly 6 word characters
"saltó"
Otras referencias anteriores se crean entre paréntesis.
sentence = "the quick brown fox jumped over the lazy dog";
regex( sentence, "(\b\w{4,4}\b).*(\b\w{4,4}\b)",
"this part: \0\!nhas this: \1\!nand this: \2\!nfour letter words");
"esta parte: sobre el perezoso
tiene esto: terminado
y esto: perezoso
palabras de cuatro letras"
El primer ejemplo de seis letras funcionó porque no había palabras de más de seis letras. El ejemplo de la palabra de cuatro letras es más complicado; está usando \b para hacer coincidir los límites de las palabras. Sin la prueba de frontera, rápido parecería ser una palabra de cuatro letras. El argumento de formato produjo las cuatro líneas de texto usando las referencias inversas \0, \1 y \2. \1 es el primer grupo entre paréntesis y \2 el segundo. \0 sigue siendo el texto completo coincidente. ( \!n es un carácter de nueva línea. Todo se ejecuta junto porque cualquier espacio se convierte en parte de la salida. )
Regex distingue entre mayúsculas y minúsculas de forma predeterminada. Este ejemplo no coincide y devuelve un valor faltante
sentence = "the quick brown fox jumped over the lazy dog";
regex( sentence, "DOG");
.
Hay una opción para eso.
sentence = "the quick brown fox jumped over the lazy dog";
regex( sentence, "DOG", "\0", IGNORECASE);
"perro"
Y hay especificaciones para cambiar mayúsculas y minúsculas en la cadena de formato.
sentence = "tHe QUick BROWN fox jUMPED over the lAZy DoG";
regex( sentence, "\b(\w)(\w*)\b", "\U\1\E\L\2\E", IGNORECASE, GLOBALREPLACE);
"El rápido zorro marrón saltó sobre el perro perezoso"
La expresión regular ha convertido la entrada de caso irregular en mayúsculas iniciales. La cadena de formato contiene \U para comenzar con mayúsculas, \L para comenzar con minúsculas y \E para finalizar el cambio de mayúsculas y minúsculas.
gramática para cadenas de reemplazo de expresiones regulares (similar a Perl)
- \L - comienza a reducir la salida hasta que \E
- \U - comienza a mayúsculas la salida hasta que \E
- \E - fin de la carcasa y modificaciones de cotización
- \l - (letra L minúscula) - minúscula el siguiente carácter
- \u - mayúscula el siguiente carácter
- \0 ... \999 - sustituye una de las expresiones coincidentes del patrón
- \e - final de un número si siguen más dígitos: \7\e123 significa expresión 7 seguida de 123 (extensión JMP)
- \\ - una sola barra invertida
Encontré un error: esto no funciona actualmente, pero lo hará en el mantenimiento 12.2 (bucles debido a una mala interacción con IGNORECASE y GLOBALREPLACE y la coincidencia de longitud cero al final de la cadena)
sentence = "tHe QUick BROWN fox jUMPED over the lAZy DoG";
regex( sentence, "\b(\w*)\b", "\L\u\1", IGNORECASE, GLOBALREPLACE);
Dado que no hay caracteres específicos de mayúsculas y minúsculas en la cadena de búsqueda, esto funcionará:
sentence = "tHe QUick BROWN fox jUMPED over the lAZy DoG";
regex( sentence, "\b(\w*)\b", "\L\u\1", GLOBALREPLACE);
"El rápido zorro marrón saltó sobre el perro perezoso"
El uso de \w+ en lugar de \w* también evita el problema al insistir en que las palabras tienen al menos un carácter.
El vals de Tennessee está en la parte delantera.
Actualización 4 de febrero de 2017: formato reparado (e imagen) para la nueva comunidad.
@gianpaolo :
Tu observación es totalmente correcta. Fue un error tipográfico y un descuido de mi parte. El script que publicaste es correcto.
Muchas gracias por la ayuda,
solo creo que el script funciona si uso "Colnames" en lugar de "ColsList" en FOR Cicle
Borrar Globales ();
Borrar registro ();
dt = Tabla de datos actual ();
NombresCol = dt << Obtener nombres de columnas ( "Cadena" );
Para ( yo = 1 , yo <= N artículos (NombresCol), i++,
Si ( ! Está perdido ( expresión regular ( Carbonizarse ( NombresCol[i] ), "^[0-9]" ) ),
columna = Columna (dt, yo); // donde dt es tu tabla de datos
ColNombre = Col << Obtener nombre ;
Nombre nuevo = concat ( "*" , nombre de columna);
columna << Escoger un nombre ( Nuevo nombre );
)
);
soy principiante en jmp scripting... perdonadme si me equivoco
Es posible que deba cambiar la expresión regular a
<SPAN class="token string">"^[0-9]"</SPAN>
para forzarlo a encontrar el carácter al comienzo de la cadena. De lo contrario, un nombre como Column7 coincidiría.
@gianpaolo ,
Aquí hay una forma de abordar . Mi sugerencia es publicar tales preguntas en "Discusiones" y proporcionar un enlace al blog. La comunidad podrá responder a su pregunta más rápido:
Clear Globals(); Clear Log();
dt = Current Data Table();
ColNames = dt << Get Column Names("String");
for( i = 1 , i <= N Items(ColsList) , i++,
If(!IsMissing(Regex(Char(ColsList[i]),"[0-9]")),
Col = Column(dt,i); // where dt is your data table
ColName = Col << Get Name;
NewName = Concat("*",ColName);
Col << Set Name(NewName);
);
);
Se proporciona una captura de pantalla de la tabla de datos (dt) que hice para ejecutar el ejemplo
Hola Craige_Hales,
He encontrado la función 'regex' muy interesante para aplicar mis trabajos.
Tengo la necesidad de modificar mi nombre Comuns para mi script en detalles. Me gustaría insertar un carácter cuando el nombre de mi columna comienza con un número.
por ejemplo, si es: "00001 DATA no 1"
entonces será: "*00001 DATA no 1" (en este caso agregué '*')
si es: "DATO no 1"
entonces será: "DATA no 1" (en este caso sin cambios)
¿Es posible usar expresiones regulares? ¿me puedes ayudar?
muchas gracias
chao gianpaolo