Ce que j'ai : une liste détaillée que j'ai obtenue en supprimant un PDF, mais certains éléments de la liste sont mal répartis entre les éléments adjacents de la liste
A = ["1. 100 Test.1; 200 Test.2; 300 ",
"Test.3; 400 Test.4",
"2. 500 Test.5; 600 Test.6;",
"3. 700 Test.7; 800 Test.8; ",
"900 Test.9; 1000 Test.10"]
Ce dont j'ai besoin : une liste commençant par les éléments 1., 2., 3., etc. et pour ajouter les autres éléments de la liste à l'élément précédent de la liste:
B = ["1. 100 Test.1; 200 Test.2; 300 Test.3; 400 Test.4",
"2. 500 Test.5; 600 Test.6;",
"3. 700 Test.7; 800 Test.8; 900 Test.9; 1000 Test.10"]
Ce que j'ai essayé : ce que j'espère, c'est un moyen d'identifier les éléments de la liste qui ont le format "XX" mais je n'ai pas eu beaucoup de chance. J'ai écrit une boucle qui identifie si l'élément de la liste commence par un entier, mais cela ne m'aide pas dans des cas comme le dernier élément de la liste A. Toute aide est appréciée.
Cette solution combine la liste en une seule chaîne de texte puis utilise re.split () afin de trouver le modèle xx à fractionner.
import re
import pprint
A = ["1. 100 Test.1; 200 Test.2; 300 ",
"Test.3; 400 Test.4",
"2. 500 Test.5; 600 Test.6;",
"3. 700 Test.7; 800 Test.8; ",
"900 Test.9; 1000 Test.10"]
# Combine list into a single string
text = "".join(A)
# Split the string into list elements based on desired pattern
lines = re.split(r'(\d\.\s)', text)
# Remove any blank lines
lines = [l for l in lines if l.strip()]
# Combine the line numbers and their matching strings back together
numbered_lines = []
for i in range(0, len(lines), 2):
numbered_lines.append(lines[i] + lines[i+1])
# Print the results
pprint.pprint(numbered_lines)
Production:
❯ python main.py
['1. 100 Test.1; 200 Test.2; 300 Test.3; 400 Test.4',
'2. 500 Test.5; 600 Test.6;',
'3. 700 Test.7; 800 Test.8; 900 Test.9; 1000 Test.10']
Mise à jour: Ajout d'un groupe de capture à regex afin de conserver les numéros de ligne
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots