2010-07-27 6 views
0

J'ai un grand nombre d'enregistrements du type suivant, que je dois modifierQu'est-ce regex à utiliser pour remplacer les lignes dans un fichier xml

  1. Je voudrais supprimer le created_by = "29 "ligne sans laisser de place. Remarque: une carte sauvage dans la valeur created_by serait préférable

  2. Je voudrais enlever toute la ligne creation_date = « ... » et le /> supérieur devrait se déplacer après l'état = « 1 » />

  3. Insérer une nouvelle ligne statique avant variable d'état (par exemple MODIFIED_BY = "30")

XML:

<user id="1" 
     org_id="3" 
     created_by="29" 
     state="1" 
     creation_date="2010-06-01"/> 

Quel genre d'expression régulière que je devrais u se pour changer cela?

Répondre

2

En supposant que les attributs apparaissent toujours dans le même ordre:

recherche: (\s+)created_by="[^"]+"(\s+state="[^"]+")\s+creation_date="[^"]+"

remplacer: $1modified_by="30"$2

Si vous devez spécifier le nom de l'élément, vous pouvez ajouter ceci au début de la regex:

(<user(?:\s+\w+="[^"]+")+?)

... et le changement t il capture groupe des références dans le remplacement comme ceci:

$1$2modified_by="30"$3

2

Une expression régulière est la mauvaise façon d'aborder ce problème pour toute une série de raisons, dont beaucoup sont décrites dans the answers to this question. Au lieu de cela, vous constaterez que vous aurez moins de maux de tête si vous utilisez un analyseur XML approprié et utilisez XPath pour identifier les parties de votre document XML que vous souhaitez modifier.

+0

Je suis juste en train de manipuler des données échantillons ici en utilisant Eclipse. Je n'ai pas l'intention de le faire par programme, s'il est possible de le résoudre en utilisant un simple paradigme de recherche et remplacement, je vais probablement m'en tenir à cela ou le faire manuellement. – Sam