Buscar cadenas usando una cadena parcial<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Todo,
Estoy tratando de buscar coincidencias de cadenas con una cadena parcial como criterio de búsqueda. He intentado varias formas, como muestro a continuación; creo que debe haber una mejor manera de usar RegEx o Pat Match para hacer esto, pero no puedo hacerlo bien. Cualquier ayuda será apreciada.
Por el bien de un ejemplo, estoy usando la tabla de datos de muestra de tráfico aéreo:
// Método # 1 Usando Pat Match
dt = Tabla de datos actuales ();
ColNames = dt << Obtener nombres de columnas();
Coincidencia = lista();
sp = Pat Span("ID");
Coincidencia Pat(NombresCol,sp>>Coincidencia);
Fósforo;
// Esto no produce coincidencias. Sin embargo, en el mismo código, si el propio ID fuera un nombre de columna, esto funciona. Entonces quiero entender cómo usar parte de la cadena de búsqueda para hacer la búsqueda.
// Método # 2 Usando Contiene()
for( i=1, i<= N Elementos(NombresCol),i++,
If(Contains(ColNames ,"ID")== 1,
Insertar en (coincidir, i);
);
);
Mejor
hoy
Re: Buscar cadenas usando una cadena parcialParece que un bucle explícito será más fácil y más claro.
for( icol = 1, icol <= nitems(nombrescol), icol++,
// usa regex en char(colnames ) y salga de este bucle cuando obtenga la coincidencia que necesita.
)
Dado que los nombres de las columnas SÍ tienen comas, y necesita el índice icol, y la expresión regular puede ser mucho más simple.Esto no está probado, pero algo así como
if( ! Ismissing(regex(char(colnames[icol]), "ID" ) ), break() );
probaría cada icol para ID en el nombre.regex devuelve falta si la coincidencia falla.
Re: Buscar cadenas usando una cadena parcialCraige@JMP :
Si bien la solución que proporcionó funciona, si se me permite, tengo 2 preguntas de seguimiento:
1. ¿Cómo obtendría los índices cuando se encuentran coincidencias?
2. Si los nombres de las columnas se ven así, lo que sucede en mi caso
Nombre( "IPhone 7, California, Sí") - ColNames
Nombre(\!" iPhone 7 , California , Sí \!") - ColCadena
Por favor aconséjame .
Mejor
día
Re: Buscar cadenas usando una cadena parcialtal vez así:
dt = Tabla de datos actuales ();
ColNames = dt << Obtener nombres de columnas();
cuerdas de col = carbonizarse (nombres de pila);
coincidencia = regex(colstrings, "[{,]\s*([^{,}]*ID[^{,}]*)[,}]", "\1");
partido de exhibicion);
Coincidencia = "ID de vuelo";
que depende de los nombres de las columnas que no usan comas ni llaves.La función char convierte la lista de nombres en una cadena:
{Línea aérea, Código de la aerolínea, Número de vuelo, Número de cola, ID de vuelo, Evento, Aeropuerto, Hora,
Hora original, Longitud, Latitud}
se convierte
"{Línea aérea, Código de la aerolínea, Número de vuelo, Número de cola, ID de vuelo, Evento, Aeropuerto, Hora, Hora original, Longitud, Latitud}"
Elegí expresiones regulares para esto porque... bueno, no será hermoso de ninguna manera.Desglosando el patrón de expresiones regulares:
"[{,] ya sea una llave abierta o una coma
\s* espacio en blanco opcional
([^{,}]*ID[^{,}]*) los paréntesis externos son la coincidencia \1 (más abajo)
[,}]" ya sea una coma o una llave cerrada
descomponiendo la parte \1:
[^{,}]* cero o más caracteres que no sean llaves ni comas
Identifica la palabra que estás buscando en un nombre de columna
[^{,}]* cero o más caracteres que no sean llaves ni comas
el tercer argumento para expresiones regulares, "\1", significa usar el primer paréntesis abierto para identificar el texto de reemplazo.