[Python] Come fare il match di tutti i caratteri racchiusi tra /* e */?

germano carella germano.carella a gmail.com
Dom 15 Mar 2015 02:13:07 CET


Ciao,
Grazie, ho risolto così:
pattern = r"/\*([\s\S]*?)\*/"
Così prende tutto il commento in un gruppo e lo posso ignorare.
Ora però mi sono imbattuto in un altro problema, ma questo è solo didattico:
ho un file con una sintassi tipo file ini di windows
[opzioni generali[
opzione1=valore1
opzione2=valore2
[opzioni secondarie]
;qualche riga di commento
secondaria1=3
secondaria2=4

Ora, il configparser fa il matching del file ini linea per linea e 
costruisce un dizionario.
Io vorrei fare il matching in una volta sola, con un unico modello, 
utilizzando re.findall per mettere il risutato in una lista di tuple dove:
[('opzini generali','opzine1=1',opzine2=2')...]

Mi sto scervellando, le ho provate davvero tutte, ma proprio non ci 
riesco...

In realtà tutto questo mi serve per fare il parser di una grammatica 
acontestuale dove le produzioni hanno una loro sintassi particolare, non 
so se qualcuno di voi le conosce.

produzione ::= 'terminale' <nonterminale> | 'nonterminale> | VUOTA 
{codice da eseguire}

Secondo voi dunque è possibile creare un modello unico per analizzare un 
file .ini, tanto per cominciare?

Grazie dell'aiutissimo!


Il 12/03/2015 23:46, Alessandro Re ha scritto:
> Ciao Germano,
>
> forse non ho capito bene la domanda, ma non puoi semplicemente
> specificare '\n' nel pattern da cercare?
>
> Ad esempio:
>
> import re # Ref. [1]
> com = '''/* inizio del commento
> continua su seconda riga
> terza riga e finisce */'''
> re.findall('[aeiou]\n', com)
>
> findall restituisce queste occorrenze:
>
> ['o\n', 'a\n']
>
> E quindi il carattere \n fa match senza problemi... Forse hai esigenze
> un po' più particolari?
>
> [1]: no, il mio cognome non fa di me un esperto di regex :)
>
> Ciauz
> ~Ale
>
> 2015-03-12 17:56 GMT+00:00 germano carella <germano.carella a gmail.com>:
>> Salve a tutti,
>> ho bisogno di fare il match di una porzine di commento che includa anche il
>> carattere \n.
>> /*inizio del commento
>> il commento continua qui.
>> Anche qui.
>> */
>> So che nelle espressioni regolari il metacarattere '.' serve proprio a
>> questo, ma se voglio includere anche '\n' devo usare il flag re.DOTALL.
>> Vorrei evitare di usarlo, anche se si complicano le cose.
>> Secondo voi si può fare? Io ho cercato in rete, ma non riesco a trovare
>> niente.
>> Qualcuno mi dà lumi?
>> Grazie!
>> _______________________________________________
>> Python mailing list
>> Python a lists.python.it
>> http://lists.python.it/mailman/listinfo/python
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python



Maggiori informazioni sulla lista Python