Eliminar cadenas en una lista que contienen una palabraTengo una lista de nombres de archivos de los que quiero seleccionar ciertos archivos. Los primeros 4 dígitos son el año en que el guión bajo actúa como un delimitador, el "abc" es solo un identificador para el tipo de archivo, el número de 3 dígitos es el ID y "resumen" o "resultado" se refieren al tipo de expediente.
Primero, solo quiero ver los archivos de "resultado". No pude averiguar cómo eliminar todos los archivos de "resumen" de mi lista.
{"2021_abc_027_result.csv", "2021_abc_027_summary.csv", "2021_abc_028_result.csv",
"2021_abc_028_summary.csv", "2021_abc_029_result.csv", "2021_abc_029_summary.csv",
"2021_abc_038_result.csv", "2021_abc_038_summary.csv", "2021_abc_040_result.csv",
"2021_abc_040_summary.csv", "2021_abc_041_result.csv", "2021_abc_041_summary.csv",
"2021_abc_042_result.csv", "2021_abc_042_summary.csv", "2021_abc_043_result.csv",
"2021_abc_043_summary.csv", "2021_abc_044_result.csv", "2021_abc_044_summary.csv",
"2021_abc_045_result.csv", "2021_abc_045_summary.csv", "2021_abc_046_result.csv",
"2021_abc_046_summary.csv", "2021_abc_047_result.csv", "2021_abc_047_summary.csv",
"2021_abc_048_result.csv", "2021_abc_048_summary.csv", "2021_abc_049_result.csv",
"2021_abc_049_summary.csv", "2021_abc_050_result.csv", "2021_abc_050_summary.csv",
"2021_abc_051_result.csv", "2021_abc_051_summary.csv", "2021_abc_052_result.csv",
"2021_abc_052_summary.csv", "2021_abc_053_result.csv", "2021_abc_053_summary.csv",
"2021_abc_054_result.csv", "2021_abc_054_summary.csv", "2021_abc_055_result.csv",
"2021_abc_055_summary.csv", "2021_abc_056_result.csv", "2021_abc_056_summary.csv",
"2021_abc_057_result.csv", "2021_abc_057_summary.csv", "2021_abc_058_result.csv",
"2021_abc_058_summary.csv", "2021_abc_059_result.csv", "2021_abc_059_summary.csv",
"2021_abc_060_result.csv", "2021_abc_060_summary.csv", "2021_abc_061_result.csv",
"2021_abc_061_summary.csv", "2021_abc_062_result.csv", "2021_abc_062_summary.csv",
"2021_abc_063_result.csv", "2021_abc_063_summary.csv", "2021_abc_064_result.csv",
"2021_abc_064_summary.csv", "2021_abc_065_result.csv", "2021_abc_065_summary.csv",
"2021_abc_067_result.csv"}
En segundo lugar, quiero seleccionar los archivos según el año y el código de 3 dígitos.
Hice algo similar en el pasado para seleccionar archivos usando expresiones regulares donde solo había un número en la cadena, así que usé
For( i = 1, i <= N Items( FileList ), i++,
FileList[i] = regex(FileList[i], "([0-9]+)", "\1")
);
pero en este caso termino con una lista de "2021", "2021", ...
Idealmente, terminaría con una lista parecida a
{"2021_027 ", "2021_027 ", "2021_028 ",
"2021_028 ", "2021_029 ", "2021_029 ",
"2021_038 ", "2021_038 ", "2021_040 ",
"2021_040 ", "2021_041 ", "2021_041 ",
"2021_042 ", "2021_042 ", "2021_043 ",
"2021_043 ", "2021_044 ", "2021_044 ",
"2021_045 ", "2021_045 ", "2021_046 ",
"2021_046 ", "2021_047 ", "2021_047 ",
"2021_048 ", "2021_048 ", "2021_049 ",
"2021_049 ", "2021_050 ", "2021_050 ",
"2021_051 ", "2021_051 ", "2021_052 ",
"2021_052 ", "2021_053 ", "2021_053 ",
"2021_054 ", "2021_054 ", "2021_055 ",
"2021_055 ", "2021_056 ", "2021_056 ",
"2021_057 ", "2021_057 ", "2021_058 ",
"2021_058 ", "2021_059 ", "2021_059 ",
"2021_060 ", "2021_060 ", "2021_061 ",
"2021_061 ", "2021_062 ", "2021_062 ",
"2021_063 ", "2021_063 ", "2021_064 ",
"2021_064 ", "2021_065 ", "2021_065 ",
"2021_067 "}y luego podría seleccionar de esa lista los archivos que quiero usar.
También se agradece cualquier consejo sobre cómo aprender a utilizar mejor las expresiones regulares.
¡Gracias!
ScriptingRe: eliminar cadenas en una lista que contienen una palabraHola,
Aquí hay un enfoque de fuerza bruta para su problema que evita la necesidad de usar expresiones regulares (no soy muy bueno con eso).
Names default to Here (1);
StartList = {"2021_abc_027_result.csv", "2021_abc_027_summary.csv", "2021_abc_028_result.csv",
"2021_abc_028_summary.csv", "2021_abc_029_result.csv", "2021_abc_029_summary.csv",
"2021_abc_038_result.csv", "2021_abc_038_summary.csv", "2021_abc_040_result.csv",
"2021_abc_040_summary.csv", "2021_abc_041_result.csv", "2021_abc_041_summary.csv",
"2021_abc_042_result.csv", "2021_abc_042_summary.csv", "2021_abc_043_result.csv",
"2021_abc_043_summary.csv", "2021_abc_044_result.csv", "2021_abc_044_summary.csv",
"2021_abc_045_result.csv", "2021_abc_045_summary.csv", "2021_abc_046_result.csv",
"2021_abc_046_summary.csv", "2021_abc_047_result.csv", "2021_abc_047_summary.csv",
"2021_abc_048_result.csv", "2021_abc_048_summary.csv", "2021_abc_049_result.csv",
"2021_abc_049_summary.csv", "2021_abc_050_result.csv", "2021_abc_050_summary.csv",
"2021_abc_051_result.csv", "2021_abc_051_summary.csv", "2021_abc_052_result.csv",
"2021_abc_052_summary.csv", "2021_abc_053_result.csv", "2021_abc_053_summary.csv",
"2021_abc_054_result.csv", "2021_abc_054_summary.csv", "2021_abc_055_result.csv",
"2021_abc_055_summary.csv", "2021_abc_056_result.csv", "2021_abc_056_summary.csv",
"2021_abc_057_result.csv", "2021_abc_057_summary.csv", "2021_abc_058_result.csv",
"2021_abc_058_summary.csv", "2021_abc_059_result.csv", "2021_abc_059_summary.csv",
"2021_abc_060_result.csv", "2021_abc_060_summary.csv", "2021_abc_061_result.csv",
"2021_abc_061_summary.csv", "2021_abc_062_result.csv", "2021_abc_062_summary.csv",
"2021_abc_063_result.csv", "2021_abc_063_summary.csv", "2021_abc_064_result.csv",
"2021_abc_064_summary.csv", "2021_abc_065_result.csv", "2021_abc_065_summary.csv",
"2021_abc_067_result.csv"};
ResultList = {};
For (i = 1, i <= N Items (StartList), i++,
if (contains (StartList [i], "result"), insert into (ResultList, StartList[i]))
);
Show (ResultList); // Yields a clean list with results only
FileList = {};
For (i= 1 , i <= N Items (ResultList), i++,
Insert into (FileList, Word (1, ResultList [i], "_") || "_" || Word (3, ResultList [i], "_"))
);
Show (FileList); // Yields the file Year and Numerical ID
Luego puede usar esa lista para ingresar a un ListBox o recuperar directamente el archivo correspondiente con la función Contains ().
Leeré más sobre expresiones regulares la próxima vez.
Mejor,
TS
Re: eliminar cadenas en una lista que contienen una palabraAquí hay un enfoque de expresiones regulares:
Names Default To Here( 1 );
Assign(
file_lst,
{"2021_abc_027_result.csv", "2021_abc_027_summary.csv", "2021_abc_028_result.csv", "2021_abc_028_summary.csv", "2021_abc_029_result.csv",
"2021_abc_029_summary.csv", "2021_abc_038_result.csv", "2021_abc_038_summary.csv", "2021_abc_040_result.csv", "2021_abc_040_summary.csv",
"2021_abc_041_result.csv", "2021_abc_041_summary.csv", "2021_abc_042_result.csv", "2021_abc_042_summary.csv", "2021_abc_043_result.csv",
"2021_abc_043_summary.csv", "2021_abc_044_result.csv", "2021_abc_044_summary.csv", "2021_abc_045_result.csv", "2021_abc_045_summary.csv",
"2021_abc_046_result.csv", "2021_abc_046_summary.csv", "2021_abc_047_result.csv", "2021_abc_047_summary.csv", "2021_abc_048_result.csv",
"2021_abc_048_summary.csv", "2021_abc_049_result.csv", "2021_abc_049_summary.csv", "2021_abc_050_result.csv", "2021_abc_050_summary.csv",
"2021_abc_051_result.csv", "2021_abc_051_summary.csv", "2021_abc_052_result.csv", "2021_abc_052_summary.csv", "2021_abc_053_result.csv",
"2021_abc_053_summary.csv", "2021_abc_054_result.csv", "2021_abc_054_summary.csv", "2021_abc_055_result.csv", "2021_abc_055_summary.csv",
"2021_abc_056_result.csv", "2021_abc_056_summary.csv", "2021_abc_057_result.csv", "2021_abc_057_summary.csv", "2021_abc_058_result.csv",
"2021_abc_058_summary.csv", "2021_abc_059_result.csv", "2021_abc_059_summary.csv", "2021_abc_060_result.csv", "2021_abc_060_summary.csv",
"2021_abc_061_result.csv", "2021_abc_061_summary.csv", "2021_abc_062_result.csv", "2021_abc_062_summary.csv", "2021_abc_063_result.csv",
"2021_abc_063_summary.csv", "2021_abc_064_result.csv", "2021_abc_064_summary.csv", "2021_abc_065_result.csv", "2021_abc_065_summary.csv",
"2021_abc_067_result.csv"}
);
For( i = 1, i <= N Items( file_lst ), i++,
print( eval(Regex( file_lst[i], "^([0-9]+)_([a-z]{3})_([0-9]{3}).*result", "Fullname: \0 Part1: \1 Part2: \2 Part3: \3" )) )
);Re: eliminar cadenas en una lista que contienen una palabraAquí hay otro enfoque.Me gusta usar la función RegexMatch (SourceStr, patStr).punto asterisco (. *) es similar a usar un% en una función de base de datos Like.Dado que desea eliminar elementos de su lista, debe comenzar desde el final de la lista; de lo contrario, su índice está dañado.
Names Default to Here(1);
FileList = {"2021_abc_027_result.csv", "2021_abc_027_summary.csv", "2021_abc_028_result.csv",
"2021_abc_028_summary.csv", "2021_abc_029_result.csv", "2021_abc_029_summary.csv",
"2021_abc_038_result.csv", "2021_abc_038_summary.csv", "2021_abc_040_result.csv",
"2021_abc_040_summary.csv", "2021_abc_041_result.csv", "2021_abc_041_summary.csv",
"2021_abc_042_result.csv", "2021_abc_042_summary.csv", "2021_abc_043_result.csv",
"2021_abc_043_summary.csv", "2021_abc_044_result.csv", "2021_abc_044_summary.csv",
"2021_abc_045_result.csv", "2021_abc_045_summary.csv", "2021_abc_046_result.csv",
"2021_abc_046_summary.csv", "2021_abc_047_result.csv", "2021_abc_047_summary.csv",
"2021_abc_048_result.csv", "2021_abc_048_summary.csv", "2021_abc_049_result.csv",
"2021_abc_049_summary.csv", "2021_abc_050_result.csv", "2021_abc_050_summary.csv",
"2021_abc_051_result.csv", "2021_abc_051_summary.csv", "2021_abc_052_result.csv",
"2021_abc_052_summary.csv", "2021_abc_053_result.csv", "2021_abc_053_summary.csv",
"2021_abc_054_result.csv", "2021_abc_054_summary.csv", "2021_abc_055_result.csv",
"2021_abc_055_summary.csv", "2021_abc_056_result.csv", "2021_abc_056_summary.csv",
"2021_abc_057_result.csv", "2021_abc_057_summary.csv", "2021_abc_058_result.csv",
"2021_abc_058_summary.csv", "2021_abc_059_result.csv", "2021_abc_059_summary.csv",
"2021_abc_060_result.csv", "2021_abc_060_summary.csv", "2021_abc_061_result.csv",
"2021_abc_061_summary.csv", "2021_abc_062_result.csv", "2021_abc_062_summary.csv",
"2021_abc_063_result.csv", "2021_abc_063_summary.csv", "2021_abc_064_result.csv",
"2021_abc_064_summary.csv", "2021_abc_065_result.csv", "2021_abc_065_summary.csv",
"2021_abc_067_result.csv"};
patStr = "2021.*result.*";
For(i = nitems(FileList), i>=1, i--,
SourceStr = FileList[i] ;
ret = Try( Regex Match( SourceStr, patStr )[1], "" );
If( ret != SourceStr, RemoveFrom(FileList,i) );
); //end For i
Show(FileList);
Re: eliminar cadenas en una lista que contienen una palabraTres soluciones de alta calidad:
@Thierry_S - fácil de entender y mantener
@Georg - exactamente cómo se usa el reemplazo de expresiones regulares
@ gzmorgan0 - eliminación eficiente de una lista trabajando hacia atrás
Puede mezclar y combinar estas ideas para crear una solución ideal que sea fácil de mantener, eficiente y que represente claramente el problema que está resolviendo.