我试图在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'>
。我不明白正则表达式抛出此错误可能是什么问题,有什么想法吗?
非常感谢。
答案 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