2016-02-03 12 views
5

Próbowałem:Regex warunek: litery z wyjątkiem "crfl" na końcu słowa lub ciąg są usunięte?

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

na ciąg

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

ale wynik jest:

car cupi fof bo lol koc coc co 

Nie uderstand, dlaczego uprzedzona twierdzenie usunięte przecinki i kropki.

Wynik jestem na to:

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

'[^ crfl] 'dopasowuje' .',', ', wszystko, co nie jest 'C'' r' 'f'' l'. Czy zajmujesz się tylko literami ASCII? BTW, '\ Z' nie jest obsługiwane przez Python' re'. –

+0

Teraz rozumiem. Nie, pracuję z Unicode, język francuski. –

+0

Niestety, 're' nie działa tak dobrze z Unicode. Czy możesz użyć modułu PyPi 'regex'? –

Odpowiedz

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

właśnie to ., w negation list .Patrz demo.

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

lub po prostu

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

Zobacz demo.

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

+0

Stosując to podejście, lista powinna zostać rozszerzona o wiele więcej znaków. Francuskie litery regex to '[a-zA-ZàâäôéèëêïîçùûüÿćœÀÂÔÈÈÏÎÏÎÇÇÛÛÆŒ]'. Tak więc odpowiedź brzmi: "(?! [Crfl]) [a-zA-ZàâäôéèëêïîçùûüÿæœùûùûùûÏÎÿœÇÇÛÛŒ] \ b' ale' \ b' powinno być znane z Unicode ('re.U' jest wymagane). –

+0

@ WiktorStribiżew https://regex101.com/r/eB8xU8/1 powinno to zrobić dla niego z flagą 'u' – vks

+0

Ale' \ w' dopasowuje cyfry i podkreślenie. –

Powiązane problemy