Пользовательская функция str вызывает ошибку типа в поиске регулярных выражений - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь создать новый класс str в python для правильной обработки заглавных букв, заголовков и т. Д., Так как он не понимает язык написанного текста.Мне нужны особые случаи для символов на турецком языке, как, я -> İ, İ -> i.

Для начальной точки я создаю пример класса и провожу некоторый тест, как показано ниже

 import builtins
 class gstr(str):
     def title(self, lang = "en"):
         if lang == "en":
             return self.title()
         elif lang == "tr":
              return self.title()

 koy = "Modiyes".lower()
 print(koy.title(), type(koy))
 builtins.str = gstr
 koy = "Modiyes".lower()
 print(koy.title(), type(koy))

 re.search(r"{}".format(koy), "aaa Modiyes bbb")

Я еще не делал никаких манипуляций, но когда я попробовал новый класс строки, он выдает TypeError: первый аргумент должен быть строкой или скомпилированным шаблоном в поиске регулярных выражений.но он печатает его правильно, а type (koy) показывает <class 'str'> для обоих классов.Я не мог понять, в чем может быть проблема с регулярным выражением, чтобы выдать эту ошибку, любая идея?Большое спасибо.

1 Ответ

0 голосов
/ 28 декабря 2018

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

import re

def tr_upper(text):
    text = re.sub(r"i", "İ", text)
    text = re.sub(r"ı", "I", text)
    text = re.sub(r"ç", "Ç", text)
    text = re.sub(r"ş", "Ş", text)
    text = re.sub(r"ü", "Ü", text)
    text = re.sub(r"ğ", "Ğ", text)
    text = text.upper() 
    return text

def tr_title(text):
    text = re.sub(r"\bi", "İ", text)
    text = re.sub(r"\bı", "I", text)
    text = re.sub(r"\bç", "Ç", text)
    text = re.sub(r"\bş", "Ş", text)
    text = re.sub(r"\bü", "Ü", text)
    text = re.sub(r"\bğ", "Ğ", text)
    text = text.title() 
    return text

def tr_capital(text):
    text = re.sub(r"^i", "İ", text)
    text = re.sub(r"^ı", "I", text)
    text = re.sub(r"^ç", "Ç", text)
    text = re.sub(r"^ş", "Ş", text)
    text = re.sub(r"^ü", "Ü", text)
    text = re.sub(r"^ğ", "Ğ", text)
    text = text.capitalize()
    return text

def tr_lower(text):
    text = re.sub(r"İ", "i", text)
    text = re.sub(r"I", "ı", text)
    text = re.sub(r"Ç", "ç", text)
    text = re.sub(r"Ş", "ş", text)
    text = re.sub(r"Ü", "ü", text)
    text = re.sub(r"Ğ", "ğ", text)
    text = text.lower() 
    return text
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...