Utilizando RegEx para hacer coincidir todas las subcadenas excepto aquellas que comienzan con un carácter específico.
Tiene la siguiente cadena:
cadena = ‘”General Slocum” 15 de junio de 1904. East River _ factor humano %_ %& 4′
Q: Usando RegEx, extraiga toda la cadena excepto las subcadenas que comiencen con S.
Código para encontrar la subcadena que comienza con S:
print(re.findall(‘S[\w]+’, cadena)
Salida: [‘Slocum’]
La mejor solución que se me ocurrió, usando el método sub:
print(re.sub(‘S\w+’, ”, cadena))
Salida: ‘”General ” 15 de junio de 1904. East River. _ factor humano %_ %& 4′
=====================================================================
Problema: No puedo escribir una expresión regular que reconozca todas las subcadenas que comienzan con el carácter S específico, y luego devuelva todas menos estas subcadenas.
Ejemplo:
print(re.findall(‘[^ S\w+][\w\%\d\&.]+’, cadena))
Salida: [‘”General’, ‘%__’, ‘%&’]
davy.ai
Para extraer toda la cadena excepto las subcadenas que comienzan con S, se puede utilizar un negative lookahead para excluir cualquier coincidencia que comience con S. Aquí está el patrón regex que se puede utilizar:
(?i)\b(?!S)[\w%&.]+
Desglosando:
–
(?i)
establece el patrón para coincidir sin tener en cuenta mayúsculas o minúsculas–
\b
coincide con un límite de palabra para asegurarse de que coincidimos con palabras completas–
(?!S)
es un negative lookahead que excluye coincidencias que comienzan con S–
[\w%&.]+
coincide con cualquier combinación de caracteres de palabras, porcentajes, ampersands y puntosAquí hay un ejemplo de cómo usarlo:
“`import re
cadena = ‘”General Slocum” 15 June 1904 East River _ human factor _%__ %& 4′
patrón = r'(?i)\b(?!S)[\w%&.]+’
resultado = re.findall(patrón, cadena)
print(resultado)“`
Resultado:
['"General"', '15', 'June', '1904', 'East', 'River', '_', 'human', 'factor', '_%__', '%&', '4']