Domanda

Sto cercando di modificare un file XML che contiene elementi di tenuta orari di apertura per le succursali di un business. Il file XML è incoerente perché per alcuni rami ha solo un tempo di apertura e un orario di chiusura, altri hanno un tempo di apertura, un orario di chiusura per il pranzo, un tempo di apertura di post-pranzo e un orario di chiusura.

Gli esempi di entrambi i tipi di seguito:

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

voglio riformattare queste stringhe in un formato più come quelli di seguito:

<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>

Ho cercato di utilizzare BBEdit espressioni regolari sul mio Mac per apportare le modifiche, ma sto avendo difficoltà, in particolare penso perché io non sono sicuro di come posso ottenere l'espressione regolare per sostituire un sottoinsieme del testo dico in modo che corrisponda a. Per esempio, in pseudo codice che voglio l'espressione regolare per fare questo:

sostituire <monday>time1,time2</monday>
con <monday><open>time1</open><lunch></lunch><close>time2</close></monday>

sostituire <monday>time1,time2,time3,time4</monday>
con <monday><open>time1</open><lunch>time2 - time3</lunch><close>time4</close></monday>

Io non sono troppo familiarità con le espressioni regolari così sto facendo alcuni errori sono sicuro, ma finora ho cercato qui sotto:

sostituire >#+\.#+,#+\.#+< con ><open>#+\.#+<open><lunch></lunch><close>#+.\#+<

ho capito questo non sta andando a lavorare comunque perché sto dicendo la regex per sostituire i numeri Si abbina con #+ con le stringhe '# +' etc.

Come posso ottenere ciò che voglio fare da regex o con altri mezzi e anche il modo di avvisare l'espressione regolare per usare un'espressione per il confronto, ma sostituire solo un sottoinsieme dei caratteri che corrisponda?

È stato utile?

Soluzione

Bene ho capito più veloce di quanto mi aspettassi. Qui ci sono le espressioni che ho usato:

ho usato la seguente stringa find:

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

... e la seguente stringa di sostituzione:

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

per abbinare le righe seguenti:

<monday>10.00,17.00</monday>

che ha provocato il seguente output:

<monday><open>10.00</open><lunch></lunch><close>17.00</close></monday>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top