Facebook粗体字符与普通字符不匹配的代码匹配方案咨询
解决Facebook粗体字符与普通字符的匹配问题
那些看起来是粗体的字符,本质是Unicode中的数学粗体字符,和普通ASCII字符的编码完全不同——比如粗体的𝗧编码是U+1D427,而普通的T是U+0054,所以直接用字符串匹配肯定找不到结果。
要实现两者匹配,核心思路是把粗体字符串转换成普通字符格式,再进行匹配。以下是原生Python的实现方案:
def convert_bold_unicode_to_normal(bold_text): converted = [] for char in bold_text: # 处理数学粗体大写字母(Unicode范围:U+1D400 至 U+1D433) if ord('\U0001D400') <= ord(char) <= ord('\U0001D433'): converted.append(chr(ord(char) - ord('\U0001D400') + ord('A'))) # 处理数学粗体小写字母(Unicode范围:U+1D434 至 U+1D467) elif ord('\U0001D434') <= ord(char) <= ord('\U0001D467'): converted.append(chr(ord(char) - ord('\U0001D434') + ord('a'))) # 处理数学粗体数字(Unicode范围:U+1D7CE 至 U+1D7D7) elif ord('\U0001D7CE') <= ord(char) <= ord('\U0001D7D7'): converted.append(chr(ord(char) - ord('\U0001D7CE') + ord('0'))) # 非粗体字符(如空格)直接保留 else: converted.append(char) return ''.join(converted) # 测试转换与匹配 bold_str = '𝗧𝗵𝗮𝗶𝗹𝗮𝗻𝗱 𝗦𝗺𝗮𝗿𝘁 𝗖𝗶𝘁𝘆 𝗘𝘅𝗽𝗼 𝟮𝟬𝟮𝟮' normalized_str = convert_bold_unicode_to_normal(bold_str) print(normalized_str) # 输出: Thailand Smart City Expo 2022 # 现在可以正常执行匹配 match_pos = normalized_str.find("Thailand Smart City") print(match_pos) # 输出: 0
这个方法通过计算Unicode编码的偏移量,把数学粗体的字母、数字转换成对应的普通字符。如果你的场景中还有其他类型的粗体变体,可以扩展函数中的字符范围判断。
内容的提问来源于stack exchange,提问作者somphon rueangsri
相关产品推荐
相关产品推荐

