2015-08-03 2 views
3

Я следующие две функции, которые отлично работает с 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.

+0

«они не могут использовать строки, закодированные utf-8» Да, да, они это делают. Этого следует ожидать, так как они работают над текстом, а кодированные строки UTF-8 - это не текст. –

+1

Возможный дубликат [Регулярное выражение для соответствия неанглийским символам?] (Http://stackoverflow.com/questions/150033/regular-expression-to-match-non-english-characters) – Flipybitz

+1

Используете ли вы Python 2 или 3 ? Что вы подразумеваете под «кодированной строкой UTF-8»? В Python 2 строки имеют только ASCII, в Python 3 строки допускают любой код Unicode. Кодировки, такие как UTF-8, имеют значение при чтении или записи текста, внутри Python строка не имеет кодировки, как таковой. – dimo414

ответ

0

Я думаю, что я куда-то направляюсь. Я пытаюсь получить эту работу без использования модулей re или regex но простой питона:

found_keywords = [] 
for word in keyword_list: 
    if word.lower() in article_text.lower(): 
     found_keywords.append(word) 

for word in found_keywords: # highlight the found keyword in the text 
    article_text = article_text.lower().replace(word.lower(), '<mark style="background-color:%s">%s</mark>' % (yellow_color, word)) 

Теперь я просто должен каким-то образом заменить найденные ключевые слова в зависимости от регистра, и я буду хорошо идти.

Просто помогите мне с этим последним шагом замены ключевых слов без учета регистра без использования re или regex, чтобы он работал на акцентированных строках.

Смежные вопросы