Il sapore di Python delle espressioni regolari - in relazione a quale?

6

Quindi la mia copia del libro classico, Mastering delle espressioni regolari , è appena arrivata e sto eseguendo la scansione esso. La copertina (terza edizione) dice "per Perl, PHP, Java, .NET, Ruby e More!" Bene, ha un capitolo completo per ciascuno di Perl, PHP, Java e .NET - ma nessun capitolo su Ruby, o, cosa più importante per me, su Python.

Sebbene l'indice elenchi alcuni punti delle differenze di Python (come il modo in cui gestisce le newline), non c'è nemmeno una tabella di essi, tanto meno un intero capitolo.

Quale delle quattro lingue coperte è il motore regex di Python più simile a? Ancora più importante, come e quali sono le principali differenze?

Nota - Non intendo come le espressioni regolari usate in Python (rispetto a Perl) - Conosco e uso il modulo re . Mi interessano solo le differenze di sintassi delle espressioni regolari attuali .

    
posta Cyclops 24.05.2012 - 01:47
fonte

2 risposte

5

Questo sito ha una tabella che confronta le caratteristiche regex per una vasta gamma di lingue e piattaforme (assicurati di scorrere In fondo). C'è anche una pagina specifica per Python , con maggiori informazioni sul modulo re (sebbene, per un più completo regex library in Python, dovresti anche esaminare il modulo regex ) più recente.

    
risposta data 24.05.2012 - 05:45
fonte
1

Verifica in modo definitivo il modulo in Python. Potrebbe essere (presto sarà?) Superato, ma è un ottimo punto di partenza per l'utilizzo di espressioni regolari in Python.

Secondo me, se vuoi davvero avere un controllo sulle espressioni regolari, impara alcune sintassi del Perl. Regex è una delle caratteristiche killer di Perl, dal momento che regex è gestito in modo nativo. Vanno mano nella mano. La sintassi Regex è più o meno la stessa in tutte le lingue, in particolare le basi come i caratteri jolly, le ancore, i caratteri speciali e la sostituzione. Fidati di me quando dico che puoi andare molto lontano su questi fondamentali, ma più ne sai, meglio è.

Una delle principali differenze tra l'espressione reex di Perl e il modulo re è che l'approccio di Python è più orientato agli oggetti. Dove in Perl potresti fare qualcosa di procedurale come questo

if ($line =~ m/^Forty-two is the answer to [life|universe|everything]/)
{
   print "Don't Panic"
}

In Python lavori con re oggetti. Qualcosa del genere:

m = re.compile("^Forty-two is the answer to [life|universe|everything]")
if m.match(line): 
    print "Dont Panic"

L'approccio orientato agli oggetti e il non-natività sono un po 'difficili da abituarsi se hai lavorato a lungo con la sintassi regex di Perl, ma trovo che dopo esserci abituato, Python fa un ottimo lavoro con le espressioni regolari.

    
risposta data 24.05.2012 - 15:48
fonte

Leggi altre domande sui tag