estoy usando
(?<![\d.])[0-9]+(?![\d.])Esto hace el trabajo por mí, pero no puedo usarlo porque dice "no se pudo compilar el patrón de expresión regular: el operando del cuantificador no es válido durante la ejecución"
Estoy buscando cualquier equivalente.
Tcl regex no es compatible con lookbehinds, aunque es compatible con lookaheads.
Puedes usar algo como
set data {12 3.45 1.665 345} set RE {(?:^|[^0-9.])(\d+)(?!\.?\d)} set matches [regexp -all -inline -- $RE $data] foreach {- group1} $matches { puts "$group1" }Producción:
12 345 Vea la demostración en línea . La expresión regular (?:^|[^0-9.])(\d+)(?!\.?\d) coincide
(?:^|[^0-9.]) - comienzo de cadena o un carácter que no sea un dígito y un punto(\d+) - Grupo 1: uno o más dígitos(?!\.?\d) - una anticipación negativa que falla la coincidencia si hay un opcional . y luego un dígito inmediatamente a la derecha de la ubicación actual.Si los números enteros son palabras individuales y no están enmarcados por otros caracteres, no necesita una expresión regular para obtenerlos solo y eliminar los que no son enteros:
% set data {12 3.45 1.665 345} 12 3.45 1.665 345 % set ints [lmap w $data { if {[string is integer $w]} { set w } else { continue } }] 12 345 o simplemente string is integer $whatever si desea verificar si una variable contiene solo un número entero. También hay wideint para enteros de 64 bits y entier para bigints.