test - Cómo usar foreach para usar regexp
regex c# online (2)
Según su comentario y la respuesta de Jerry, supongo que necesita
regexp -- {(?:cell)/s+?(/("/w+"/))} $searched -> matched_part_in_brakets
puts $matched_part_in_brakets
o
regexp -- {(?:cell)/s+?(/("/w+"/))} $searched match matched_part_in_brakets
puts $matched_part_in_brakets
Estoy usando el siguiente código para buscar datos en particular y almacenarlos en una variable.
foreach searched $names {
[regexp {[cell]+} $searched match]
}
Aquí los nombres son la variable que tiene muchos datos. Me aparece un mensaje de error que dice: Error: invalid command name "1.
Soy nuevo en tcl, así que no puedo entender cuál es el error. ¿Mi código es correcto? ¿Funcionará? Gracias
Su expresión regular está evaluando primero y la regexp {[cell]+} $searched match
1
, que luego se convierte en:
[1]
Que es un comando inválido. Eliminar los corchetes:
regexp {[cell]+} $searched match
Ahora, no creo que estés usando la expresión regular correctamente. Esto buscará cualquiera de las combinaciones c
, e
y l
al menos una vez, lo que significa que aceptará cell
, lec
o incluso c
solo. Probablemente quieras:
regexp {((?:cell)+)} $searched match matched
Esto coincidirá con cell
, cellcell
, cellcellcell
y cellcellcell
y lo almacena en la variable matched
.
Los corchetes se usan para capturar grupos coincidentes; y estos (?: ...)
son para grupos que no capturan.
EDITAR: Siguiendo mi comentario, haría algo como:
set newlist [list]
foreach searched $names {
regexp {cell/s*/("([^"]+)"/)} $searched match matched
lappend $newlist $matched
}
Ahora, la lista $ newlist contiene todos los valores coincidentes. Puede hacer un foreach para mostrarlos todos;
foreach n $newlist {puts $n}