Python ofrece una variedad de opciones para trabajar con cadenas. En esta entrada de blog, primero introduciremos los fundamentos del análisis sintáctico de cadenas de Python y explicaremos la diferencia entre cadena, indexación y secuencia de cadenas.
Ya he utilizado mis conocimientos en 2025 para poner en marcha una herramienta que llamamos Quick Extract. También ayuda a los principiantes a crear un API de documentos con algunos documentos de ejemplo para analizar nuevos documentos.
Indexación de cadenas
En Python, un Cadena una secuencia de caracteres. Se puede acceder a estos caracteres mediante un índice, que se utiliza para 0 comienza. Permite acceder al primer, segundo y tercer carácter de una cadena:
text = "Python"
print(text[0]) # Gibt 'P' aus
print(text[1]) # Gibt 'y' aus
print(text[2]) # Gibt 't' ausTambién puede utilizar índices negativos para acceder a los caracteres desde el final de la cadena:
print(text[-1]) # Gibt 'n' aus
print(text[-2]) # Gibt 'o' aus
print(text[-3]) # Gibt 'h' ausSecuencia de cadenas
Una secuencia de cadenas es una parte de una cadena que se especifica mediante un índice inicial y final. En Python, puedes utilizar la llamada sintaxis de corte para acceder a partes de una cadena:
pythonCopiar códigotext = "Python"
print(text[0:3]) # Gibt 'Pyt' aus
print(text[1:4]) # Gibt 'yth' aus
print(text[:2]) # Gibt 'Py' aus (ohne Anfangsindex entspricht es Index 0)
print(text[3:]) # Gibt 'hon' aus (ohne Endindex entspricht es Index + 1)La sintaxis de corte también funciona con índices negativos:
print(text[-3:-1]) # Gibt 'ho' aus
print(text[:-2]) # Gibt 'Pyth' ausPara resumir las diferencias entre indexación de cadenas y secuencia de cadenas: La indexación de cadenas se refiere al acceso a un único carácter de una cadena, mientras que la secuencia de cadenas se refiere al acceso a parte de la cadena.
Caso práctico del método split en Python
Números de versión y hash de confirmación
En muchas situaciones, como cuando trabajamos con proyectos de software, a menudo necesitamos extraer información de cadenas combinadas. Tomemos como ejemplo una cadena que contiene un número de versión y un hash de confirmación: "2.7.0_bf4fda703454". Para separar esta información, podemos utilizar la función split()-en Python.
version_hash = "2.7.0_bf4fda703454"
version_hash_list = version_hash.split("_")El resultado es una lista de cadenas con el siguiente aspecto:
['2.7.0', 'bf4fda703454']Aquí la cadena se separa en cada guión bajo. Si desea que la separación se produzca sólo después del primer guión bajo, puede utilizar el método split() con el parámetro opcional 1 uso:
version_hash.split("_", 1)Si está seguro de que la cadena contiene un guión bajo, puede incluso descomprimir las partes izquierda y derecha en variables separadas:
lhs, rhs = version_hash.split("_", 1)
print(lhs) # Gibt '2.7.0' aus
print(rhs) # Gibt 'bf4fda703454' ausUna alternativa a la split()-método es el uso de partition(). El uso es similar al del ejemplo anterior, salvo que aquí se devuelven tres componentes en lugar de dos. La principal ventaja de este método es que no falla si la cadena no contiene el separador.
En general, el split()-es una forma práctica de dividir y procesar información combinada en Python. En nuestro ejemplo, podríamos separar fácilmente el número de versión y el hash de confirmación.
Análisis sintáctico de cadenas en Python con expresiones regulares (regex)
Descomponga texto con grupos regex con nombre en Python y sopese las ventajas y desventajas frente a funciones convencionales como la indexación de cadenas en Python, la secuenciación o el método de división.
Cuando tenemos cadenas complejas que necesitan descomponerse debido a patrones o a una puntuación difícil, las expresiones regulares pueden ayudar a reconocer y descomponer estos patrones.
A continuación se muestra un ejemplo de código para el análisis sintáctico de cadenas con grupos regex con nombre en Python:
import re
# Beispieltext
text = "Max Mustermann, Alter: 30 Jahre, Stadt: Berlin"
# Regulärer Ausdruck mit benannten Gruppen
pattern_text = r'(?P<name>[A-Za-zäöüÄÖÜß\s]+),\s+Alter:\s+(?P<age>\d+)\s+Jahre,\s+Stadt:\s+(?P<city>[A-Za-zäöüÄÖÜß\s]+)'
# Kompilieren des regulären Ausdrucks
pattern = re.compile(pattern_text)
# Suche nach Übereinstimmungen im Text
match = pattern.match(text)
# Überprüfen, ob eine Übereinstimmung gefunden wurde
if match:
# Extrahieren der benannten Gruppen
name = match.group('name')
age = match.group('age')
city = match.group('city')
# Ausgabe der extrahierten Informationen
print(f"Name: {name}")
print(f"Alter: {age}")
print(f"Stadt: {city}")
else:
print("Keine Übereinstimmung gefunden.")
En este ejemplo, tenemos un texto de ejemplo con el nombre, la edad y la ciudad de una persona. Utilizamos una expresión regular con grupos nombrados para extraer la información relevante del texto. Los grupos se denominan como sigue
name- para el nombre de la personaage- por la edad de la personacity- para la ciudad en la que vive la persona
Una vez compilada la expresión regular, buscamos coincidencias en el texto. Si se encuentra una coincidencia, se extraen los grupos nombrados y se emite la información extraída.
Ventajas
- Flexibilidad - Las expresiones regulares ofrecen un alto grado de flexibilidad en el análisis de textos y pueden reconocer patrones complejos.
- Compactas - Las expresiones regulares suelen ser más breves y concisas que los métodos convencionales.
- Grupos con nombre - Con los grupos con nombre podemos identificar y extraer fácilmente partes del patrón.
Desventajas
- Curva de aprendizaje - Las expresiones regulares tienen una curva de aprendizaje más pronunciada y suelen ser más difíciles de leer y entender que los métodos convencionales.
- Aplicabilidad limitada - Las expresiones regulares no son adecuadas para documentos profundamente anidados como HTML, XML o JSON.
Método de indexación, secuenciación o división de cadenas de Python: Las funciones convencionales como el método de indexación, secuenciación o división de cadenas de Python son muy adecuadas para tareas sencillas de análisis de texto en las que la estructura de la cadena de caracteres es clara y simple.
Ventajas
- Simplicidad - Los métodos convencionales son fáciles de entender y aplicar.
- Legibilidad - El código es más fácil de leer y comprender para los desarrolladores familiarizados con Python.
Desventajas
- Flexibilidad limitada - Estos métodos ofrecen menos flexibilidad a la hora de analizar patrones textuales complejos.
- Código más largo - El código puede hacerse más largo y confuso al intentar reconocer y descomponer patrones complejos.
Automatización Python Regex
En este ejemplo mostramos cómo utilizar el SDK de Konfuzio para automatizar la creación de regex. Utilizamos el SDK para crear un tokenizador regex personalizado para la etiqueta "ContractDate" para crear. Encontrará más información en documentación técnica y en un más artículos del blog encontrar.
from konfuzio_sdk.data import Project
from konfuzio_sdk.tokenizer.regex import RegexTokenizer
from konfuzio_sdk.tokenizer.base import ListTokenizer
# Ersetzen Sie YOUR_PROJECT_ID und YOUR_CATEGORY_ID durch die entsprechenden IDs Ihres Projekts und Ihrer Kategorie.
my_project = Project(id_=YOUR_PROJECT_ID)
category = my_project.get_category_by_id(id_=YOUR_CATEGORY_ID)
tokenizer = ListTokenizer(tokenizers=[])
label = my_project.get_label_by_name("ContractDate")
# Finden von Regex-Ausdrücken, die mit Vorkommen des Labels "ContractDate" coincidir
for regex in label.find_regex(category=category):
regex_tokenizer = RegexTokenizer(regex=regex)
tokenizer.tokenizers.append(regex_tokenizer)
# Utiliza el tokenizador regex creado para crear anotaciones para cada cadena coincidente en un documento.
# Sustituye YOUR_DOCUMENT_ID por el ID correspondiente de tu documento.
documento = mi_proyecto.get_documento_por_id(YOUR_DOCUMENT_ID)
tokenizer.tokenize(documento)En este fragmento de código:
- Vamos a importar las clases y funciones necesarias del SDK Konfuzio.
- Vamos a crear un
Project-objeto especificando el ID del proyecto. - ¿Conseguimos un
Category-objeto especificando el ID de la categoría. - Vamos a crear un
ListTokenizer. - ¿Conseguimos el
Label-objeto para la etiqueta "ContractDate„. - Busquemos expresiones regex que empiecen con apariciones de la etiqueta "
ContractDate" en la categoría de datos de formación. - Añadamos cada expresión regex encontrada como un
RegexTokenizerelListTokenizerañadido. - Utilicemos el tokenizador regex creado para crear anotaciones para cada cadena coincidente en un documento. Para ello, especificamos el ID del documento y llamamos a la función
tokenize()-del tokenizador.
Una vez creado el tokenizador, puede utilizarlo para generar automáticamente expresiones regex para la etiqueta "ContractDate" en tus documentos y crear anotaciones para ellos.
