自定义str函数在正则表达式搜索中引发类型错误

时间:2018-12-28 10:57:27

标签: regex python-3.x

我试图在python中创建新的str类以正确处理大写,标题等,因为它不理解所写文本的语言。我需要一些特殊的土耳其字符,例如i->İ,İ-> 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 :(得分:1)

我不知道该如何使用类,因此,我决定使用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