2016-02-03 15 views
5

ho provato:Condizione regex: le lettere tranne "crfl" alla fine della parola o della stringa sono cancellate?

re.sub(r'[^crfl](?=(\.|\,|\s|\Z))', '', val, flags=re.I) 

su stringa

car. cupid, fof bob lol. koc coc, cob 

ma il risultato è:

car cupi fof bo lol koc coc co 

non mi uderstand, perché asserzione lookahead cancellato le virgole e punti.

Il risultato Io sono per è:

car. cupi, fof bo lol. koc coc, co 
+0

'[^ crfl]' partite '.',', ', tutto ciò che non è' C', 'R',' f', 'L'. Hai a che fare solo con lettere ASCII? BTW, '\ Z' non è supportato da Python' re'. –

+0

Capisco ora. No, sto lavorando con Unicode, lingua francese. –

+0

Sfortunatamente, 're' non funziona bene con Unicode. Puoi usare il modulo Pyge 'regex'? –

risposta

2
[^crfl.,](?=(\.|\,|\s|\Z)) 

sufficiente includere ., in negation list .Vedi demo.

https://regex101.com/r/yX8zV8/5

o semplicemente

\w(?<![crlf])\b 

See demo.

https://regex101.com/r/eB8xU8/1

+0

Utilizzando questo approccio l'elenco dovrebbe essere espanso con molti più caratteri. Le regex delle lettere francesi sono '[a-zA-ZàâäôéèëêïîçùûüÿæœÀÄÄÉÉÈËÊÏΟÇÙÛÜÆŒ]'. Quindi, la risposta è '(?! [Crfl]) [a-zA-ZàâäôéèëêïîçùûüÔæœÀÄÄÉÉÈËÊÏΟÇÙÛÜÆŒ] \ b' ma' \ b' dovrebbe essere a conoscenza di Unicode ('re.U' è richiesto). –

+0

@ WiktorStribiżew https://regex101.com/r/eB8xU8/1 questo dovrebbe farlo per lui con il flag 'u' – vks

+0

Ma' \ w' corrisponde a cifre e un trattino basso. –

Problemi correlati