Python:如何测试字符串是否包含不区分重音的列表中的一个字符串?

2024-09-27 18:02:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要测试一个字符串是否包含列表中的一个字符串,忽略重音

我尝试使用for+in+if+unidecode,但没有成功:

from unidecode import unidecode

def temServentiaExclusiva(nome_orgao):
     #fix-me: pegar ids dinamicamente
    regras = [
        {'especializada_id':70, 'termos': [u'orfaos e sucessoes', u'familia']}
    ]

    for r in regras:
      #if(unidecode(nome_orgao) in s for s in r['termos']):
      if([t for t in r['termos'] if(t in unidecode(nome_orgao))]):
        return r['especializada_id']


print(temServentiaExclusiva('orfãos'))
print(temServentiaExclusiva('Cartório da 6ª Vara de Orfãos e Sucessões'))

结果是

那么,我怎样才能做到这一点呢


Tags: 字符串inid列表forifosprint
1条回答
网友
1楼 · 发布于 2024-09-27 18:02:28

可以使用嵌套的for循环而不是列表执行此操作:

from unidecode import unidecode

def temServentiaExclusiva(nome_orgao):
    regras = [
        {'especializada_id':70, 'termos': [u'orfaos e sucessoes', u'familia']}
    ]

    uni_nome_orgao = unidecode(nome_orgao).lower()

    for r in regras:
      for t in r['termos']:
          if uni_nome_orgao in t or t in uni_nome_orgao:
              return r['especializada_id']

print(temServentiaExclusiva('orfãos'))

关键是将nome_orgao转换成标准格式,然后对照所有术语进行检查。正如您已经做的那样,unidecode将删除所有重音。在末尾添加.lower(),使所有内容都小写。然后,迭代regras中的每个r和termos中的每个t,并检查t是否在uni_nome_orgao中,或者uni_nome_orgao是否在t中

希望有帮助

相关问题 更多 >

    热门问题