Я следующие две функции, которые отлично работает с ASCII-строки и использовать re
модуль:Обработка акцентированных символов Unicode с модулем питона регулярных выражений
import re
def findWord(w):
return re.compile(r'\b{0}.*?\b'.format(w), flags=re.IGNORECASE).findall
def replace_keyword(w, c, x):
return re.sub(r"\b({0}\S*)".format(w), r'<mark style="background-color:{0}">\1</mark>'.format(c), x, flags=re.I)
Однако, они не на использовании utf-8
закодированные строки с диакритическими знаками. При дальнейшем поиске я обнаружил, что модуль regex
лучше подходит для строк Unicode, и поэтому я пытаюсь его перенести на использование regex
последние пару часов, но ничего не работает. Это то, что я, как сейчас:
import regex
def findWord(w):
return regex.compile(r'\b{0}.*?\b'.format(w), flags=regex.IGNORECASE|regex.UNICODE).findall
def replace_keyword(w, c, x):
return regex.sub(r"\b({0}\S*)".format(w), r'<mark style="background-color:{0}">\1</mark>'.format(c), x, flags=regex.IGNORECASE|regex.UNICODE)
Однако, при использовании ударения (не нормированные) utf-8
кодированных строк, я получаю сообщение об ошибке ordinal not in range
.
EDIT: Предлагаемый дублирующий вопрос: Regular expression to match non-English characters? не решает мою проблему. Я хочу использовать модуль python re
/regex
. Во-вторых, я хочу получить функции find
и replace
, работающие с использованием python.
EDIT: Я использую Python 2
EDIT: Если вы чувствуете, что вы можете помочь мне получить эти две функции работают с использованием Python 3, пожалуйста, дайте мне знать. Надеюсь, я смогу вызывать python 3 для использования только этих двух функций через мой скрипт python 2.
«они не могут использовать строки, закодированные utf-8» Да, да, они это делают. Этого следует ожидать, так как они работают над текстом, а кодированные строки UTF-8 - это не текст. –
Возможный дубликат [Регулярное выражение для соответствия неанглийским символам?] (Http://stackoverflow.com/questions/150033/regular-expression-to-match-non-english-characters) – Flipybitz
Используете ли вы Python 2 или 3 ? Что вы подразумеваете под «кодированной строкой UTF-8»? В Python 2 строки имеют только ASCII, в Python 3 строки допускают любой код Unicode. Кодировки, такие как UTF-8, имеют значение при чтении или записи текста, внутри Python строка не имеет кодировки, как таковой. – dimo414