2009-04-02 9 views
2

Je me retrouve souvent besoin d'un outil qui me permettrait de:outil pour Regex grande recherche et de remplacement

recherche de plusieurs modèles regex multi-ligne dans un grand fichier et les remplacer en utilisant rétro-référencement.

Dois-je:

  1. prendre les 2 heures il va me falloir de me construire un tel outil
  2. Confier quelque chose a déjà construit (s'il vous plaît suggérer)
  3. apprendre à utiliser une langue qui est particulièrement bon à ce genre de chose (Perl?)

Exemple
J'ai un document XML contenant des milliers d'entrées. Il y a environ 100 entrées avec un champ de valeur connu qui doit être supprimé. Je peux construire une expression régulière pour chaque entrée. L'expression est la même pour les 100 entrées sauf pour la partie chaîne de valeur. Soit cet outil devrait être capable de faire une boucle une fois pour chaque valeur ou juste une fois avec 100 termes OR (|) dans l'expression (ce serait énorme). Dans ce cas, je remplace les correspondances par un blanc, mais dans d'autres cas, je reformate le texte et réinsère le champ de valeur.

Répondre

2

Je suppose que vous devriez écrire la chose dans Python. La bibliothèque python re est grand:

# get the re library 
import re 

# this is the line to process 
xml_line = "<stuff><bad i_am_naughty=\"True\"></bad></stuff>" 
# compile a regex 
exp = re.compile ("(.*)(<bad.*bad>)(.*)") 
# run the regex on the line 
match = exp.search (xml_line) 
# print out the groups the regex found 
print match.groups() 

N.B. Vous pouvez également utiliser python XML parsing libraries pour supprimer les éléments que vous ne voulez pas. L'utilisation de l'analyse syntaxique XMl python simplifie une partie de la complexité que j'ai ignorée dans mon exemple (plusieurs lignes, etc.). Au lieu d'un exemple d'analyse XML Python, ce question a quelques bonnes réponses pour analyser XML en Python.

0

Je suggère de ne pas utiliser l'expression régulière. XML devrait généralement être manipulé avec des outils XML. Pourquoi ne pas simplement utiliser XSLT?

+0

Cette affaire est xml, mais de nombreux cas ne sont pas. –

+0

Je pense qu'il veut utiliser des regexes pour faire l'expression pour choisir une des valeurs faciles à construire. L'alternative dans XSLT aurait environ 100 modèles correspondants, non? – hughdbrown

1

Je ne suis pas tout à fait sûr de ce que vos données ressemble, mais je considérerais écrire l'outil en python en trois passes:

  1. convertir le fichier de chemin XML, plus variable = valeur aux lignes de XML.path .variable = valeur
  2. appliquent regex massives à chaque ligne, la suppression éventuellement ligne de sortie
  3. convertir la liste abrégée des lignes XML.path.variable = valeur de retour au format XML
Questions connexes