Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    RegEx: come escludere dalla ricerca attributi tag?

    Ciao a tutti.

    Premetto che non sono un programmatore ma un designer.

    Sto facendo un'opera di pulizia di un grosso database di files html pieno di tag inutili, ed ho quasi finito ma mi mancano un paio di comandi regex che non riesco a creare:

    Con questo comando, suggeritomi, riesco perfettamente a rimuovere tag con l'attributo specificato (class="ArticoloTesto"), conservando il testo contenuto:

    trova: (?s)<p[ \t\r\n]+class="ArticoloTesto">(.+?)</p>
    sostituisci: \1

    Ora, avrei bisogno anche dell'opposto. Ovvero vorrei fare lo strip di tutti i tag P che siano senza l'attribbuto specificato. Non in generale senza attributo (anche quello potrebbe essere utile), ma mi servirebbe proprio eliminare tutti quelli SENZA l'attributo class="ArticoloTesto".

    Per la cronaca, questi comandi li sto utilizzando con sistemi di advanced find and replace basati su motore Perl. In particolare Ultra Edit.

    Quello che vorrei ottenere è:

    stringhe originali:

    <p class="ArticoloTitoloPrincipale">Disposizioni sulle acque</p>
    <p class="ArticoloTesto">Fonte: BOLLETTINO UFFICIALE DELLA REGIONE TRENTINO-ALTO
    ADIGE

    N. 28

    del 2 luglio 2002

    SUPPLEMENTO N. 2 </p>


    testo prova</p>

    stringhe desiderate:

    Disposizioni sulle acque
    <p class="ArticoloTesto">Fonte: BOLLETTINO UFFICIALE DELLA REGIONE TRENTINO-ALTO
    ADIGE

    N. 28

    del 2 luglio 2002

    SUPPLEMENTO N. 2 </p>
    testo prova


    Infine, sempre se non chiedo troppo, mi farebbe comodissimo anche un comando che sia in grado di cambiare specifiche coppie di tag con specifico attributo conservando il contenuto. ad es:

    originale: <span class="ArticoloTesto">testo che rimane lo stesso</span>
    voluto: <p class="ArticoloTesto">testo che rimane lo stesso</p>

    qualsiasi altro span dovrebbe rimanere invariato.

    Con un banale find replace non posso perché c'è la relativa tag di chiusura da modificare.

    Sapete come aiutarmi?

    Un grazie comunque a tutti.
    Raf.

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Le RegEx (o RE in Perl) sono un linguaggio all'interno di un linguaggio. e servono essenzialmente per la manipolazione di testi.

    Non conosco l'interfaccia che stai usando, ed anche la sintassi esterna delle tue RE e` diversa da quella di Perl. Pertanto mi trovo in leggera difficolta` ad interpretare tutte le tue RE e/o a correggerle.


    Premetto che tutte le tue richieste sono esaudibili tramite RE. Resta da vedere se e` il metodo piu` veloce/intelligente, ma questa e` una valutazione che dovrai fare tu.


    Per la prima domanda, la RE che io userei e` (utilizzo la sintassi Perl, non la tua):
    codice:
    s/\<p([ \t\r\n]+class\=\"ArticoloTitoloPrincipale\")+?\>(.+?)</p>/$2/
    (spero di non aver commesso errori: son oun po' arrugginito con le RE)

    Oppure (se tutto quello che devi eliminare e` sempre un

    con all'interno class="ArticoloQualsiasicosa")
    codice:
    s/\<p([ \t\r\n]+class\=\"Articolo.+?\")+?\>(.+?)</p>/$2/

    Per la seconda domanda:
    codice:
    s/span/p/
    (ma non so se questo e` sufficientemente specifico: sostituisce tutte le stringe "span" con "p")
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3

    Grazie Mich_

    Ciao Mich_ :-)

    Innanzitutto grazie per la tua gentile risposta, e scusa per la mia tarda risposta. Mi sono dimenticato di sottoscrivere il thread e quindi ho letto solo oggi.

    Le RegEx che ho usato sono quelle, immagino leggermente modificate, di alcuni software di find-replace avanzati. In prticolare UltraEdit, che consente di scegliete 3 motori (Perl, Unix e UltraEdit).

    I comandi che ho usato sono quasi tutti in Perl, ma a questo punto mi pare ovvio che si tratta di un Perl modificato.

    Ad ogni modo ho completato l'opera e non è stato facile, perchè avevo ben 3200 files html pieni zeppi di tag p e span, anche nidificati, totalmente inutili, tipo un'apertura e chiusura di tag per ogni riga. Tieni conto che ho files html che constano di 80/100 pagine di testo ciscuno. Immagina un tag p per ogni riga, e magari anche con invii errati, con il testo che doveva proseguire.

    Alla fine ho usato le maniere forti ed ho rinominato i pochissimi tag P e span che mi servivano, ed ho rimosso in blocco tutti i tag p e span di apertura e di chiusura, sostituendoli quando necessario con
    o con uno spazio.

    Dopodiché ho ricreato il tag p titolo, poi il tag p testo, ed infine anche il tag <title>, che mancava, contenente la prima riga di testo trovata nel body.

    Un lavoro enorme ma ne è valsa la pena. Tutti i files sono ora corretti, perfettamente funzionanti, e totalmente privi di errori.

    La macro finale constava di ben 14 comandi!

    Per eventuale aiuto ad altri allego qui di seguito alcuni comandi che ho usato, e che hanno funzionato alla perfezione su UltraEdit (che è gratuito per 30gg):

    Strippa tutti i P senza l'attrib specificato:
    codice:
    find:		<p(?![ \t\r\n]+class="ArticoloTesto").*?>(.+?)</p>
    replace:	\1
    Comando per eseguire lo strip di un tag con uno specifico attrib:
    codice:
    find:		(?s)<p[ \t\r\n]+class="ArticoloTesto">(.+?)</p>
    
    replace:	\1
    Spero di essere stato d'aiuto a qualcuno, come altri lo sono stati con me :-)

    Un saluto.
    Raf.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.