2012-11-07 9 views
7

Potrzebuję rozwiązań do this question, z wyjątkiem Python! Próbowałem już zainstalować bibliotekę regex dla Pythona, as apparently, która umożliwia użycie wyrażeń POSIX w wyrażeniach regularnych Pythona, ale mimo to domyślam się, że nie zawiera znaków Unicode w klasie [:alpha:]. Np:Jak dopasować znaki akcentowane za pomocą wyrażenia regularnego w języku Python?

>>> re.search(r'[[:alpha:] ]+','Please work blåbær and NOW stop 123').group(0) 
'Please work bl' 

Kiedy chcę go dopasować Please work blåbær and NOW stop

EDIT: Używam Python 2.7

EDIT 2: Próbowałem następujące:

>>> re.search(re.compile('[\w ]+', re.UNICODE),'Please work blåbær and NOW stop 123').group(0) 
'Please work bl\xc3' 

Nie do końca to, co chciałem (chcę dopasować część po pierwszej nie-ASCII), b ut co najmniej pasuje do postaci bardziej niż wcześniej. Co powinienem tu zrobić, aby dopasować go do reszty tego, czego chcę?

EDYCJA 3: Nie chcę dopasowywać żadnych znaków spoza "słowa"; przez "słowo" mam na myśli a-z, A-Z, spację i wszelkie akcentowane odmiany znaków słownych. Mam nadzieję, że wpadłem na swój pomysł; w zdaniu jak

lets match força, but stop before that comma 

Chcę dopasować tylko lets match força

EDIT 4: Więc starałem się używać Python 3 tylko dla tego jednego skryptu:

>>> re.search(re.compile('[\w ]+', re.UNICODE),'lets match força, but stop before that comma').group(0) 
'lets match força' 

Chyba działa w przeważającej części w Pythonie 3, oprócz tego, że dopasowuje również liczby (których zdecydowanie nie chcę) i podkreślenia. Jakikolwiek sposób to naprawić, w Pythonie 2 lub 3?

Odpowiedz

2

Nie jest jasne, której wersji Pythona używasz. jeśli używasz wersji 2.x, możesz mieć problem z unikodem. zobacz te post, aby uzyskać dalsze wskazówki i możesz zaktualizować swoje pytanie, aby je dalej rozwinąć.

Im dość surprissed, że nie mogę przekonwertować znak akcentowany do właściwej reprezentacji unicode ...

ale istnieje obejście:

re.search(re.compile('((\w+\s)|(\w+\W+\w+\s))+', re.UNICODE), ur'Please work blåbær and NOW stop 123').group(0) 

lub

re.search(re.compile('\D+', re.UNICODE), ur'Please work blåbær and NOW stop 123').group(0) 
Powiązane problemy