【问题标题】:Custom str function raises type error in regex search自定义 str 函数在正则表达式搜索中引发类型错误
【发布时间】:2018-12-28 10:57:27
【问题描述】:

我正在尝试在 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: first argument must be string or compiled pattern。但它会正确打印它,并且 type(koy) 为两个类都显示<class 'str'>。我不明白正则表达式抛出这个错误有什么问题,知道吗? 非常感谢。

【问题讨论】:

标签: regex python-3.x


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    相关资源
    最近更新 更多