Question

Je suis en train de modifier un fichier XML qui contient des éléments de maintien horaires d'ouverture des succursales d'une entreprise. Le fichier XML est incompatible parce que pour certaines branches, il a juste un temps d'ouverture et une fermeture, d'autres ont un temps d'ouverture, un temps de fermeture pour le déjeuner, un temps d'ouverture après-midi et un temps de fermeture.

Des exemples des deux types ci-dessous:

<monday>10.00,17.00</monday>
<monday>09.00,12.30,13.30,17.00</monday>

Je veux reformater ces chaînes pour un meilleur format tels que ceux ci-dessous:

<monday>
  <open>10.00</open>
  <lunch></lunch>
  <close>17.00</close>
</monday>

<monday>
  <open>09.00</open>
  <lunch>12.30 - 13.30</lunch>
  <close>17.00</close>
</monday>

J'ai essayé d'utiliser des expressions régulières BBEdit sur mon Mac pour faire des changements, mais je vais avoir du mal, je pense en particulier parce que je ne sais pas comment je peux obtenir l'expression régulière pour remplacer un sous-ensemble du texte Je dis à apparier. Par exemple, dans le code de pseudo Je veux que l'expression régulière pour faire ceci:

remplacer <monday>time1,time2</monday>
avec <monday><open>time1</open><lunch></lunch><close>time2</close></monday>

remplacer <monday>time1,time2,time3,time4</monday>
avec <monday><open>time1</open><lunch>time2 - time3</lunch><close>time4</close></monday>

Je ne suis pas trop familier avec les expressions régulières, donc je fais des erreurs, je suis sûr, mais jusqu'à présent, j'ai essayé le ci-dessous:

remplacer >#+\.#+,#+\.#+< avec ><open>#+\.#+<open><lunch></lunch><close>#+.\#+<

Je comprends cela ne va pas au travail de toute façon parce que je dis la regex pour remplacer les chiffres, il correspond avec #+ avec les chaînes de la # + 'etc.

Comment puis-je obtenir ce que je veux faire par regex ou d'autres moyens et aussi comment je dire à l'expression régulière d'utiliser une expression de comparaison, mais seulement remplacer un sous-ensemble des caractères qu'il correspond?

Était-ce utile?

La solution

Eh bien j'ai tout compris plus vite que prévu. Voici les expressions que j'ai utilisé:

J'utilisé la chaîne de découverte suivante:

(<[a-z]+day>)([0-9]+\.[0-9]+),([0-9]+\.[0-9]+)(</[a-z]+day>)

... et la chaîne remplacer suivante:

\1<open>\2</open><lunch></lunch><close>\3</close>\4

pour faire correspondre les lignes suivantes:

<monday>10.00,17.00</monday>

qui a abouti à la sortie suivante:

<monday><open>10.00</open><lunch></lunch><close>17.00</close></monday>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top