You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则匹配指定ASCII字母的Unicode相似字符?求相关工具

匹配视觉相似Unicode字符的解决方案

Python标准正则库re没有内置类似[\LookLike{n}]的语法,但可以通过第三方库或自定义脚本实现需求,以下是具体方法:

一、用第三方库快速实现

可以使用confusable_homoglyphs库,它专门用于识别和处理视觉相似的Unicode同形字符。

步骤:

  1. 安装库:
pip install confusable-homoglyphs
  1. 编写代码实现匹配:
import re
import sys
from confusable_homoglyphs import confusables

sys.stdout.reconfigure(encoding='utf-8')

# 获取所有与'n'视觉相似的字符
look_alike_chars = confusables.similar_characters('n')
# 构建正则字符集模式
pattern = re.compile(r'[' + ''.join(look_alike_chars) + ']')

# 测试匹配结果
for char in look_alike_chars:
    if pattern.match(char):
        print(f"Character '{char}' matches the pattern.")
    else:
        print(f"Character '{char}' does NOT match the pattern.")

这个库会自动返回所有视觉上与目标字符相似的字符,包括带变音符号的拉丁字符、其他语言的同源视觉字符等。

二、手动生成相似字符列表

如果不想依赖第三方库,可以通过以下方式生成:

1. 利用Unicode属性筛选

通过unicodedata模块,基于字符的分解形式或名称筛选相似字符:

import unicodedata

def get_similar_chars(base_char):
    similar = {base_char}
    # 遍历常用Unicode范围(可按需扩大)
    for cp in range(0x0000, 0xFFFF):
        char = chr(cp)
        try:
            # 筛选带变音符号的同基础字符
            decomposed = unicodedata.normalize('NFD', char)
            if base_char in decomposed:
                similar.add(char)
            # 筛选名称包含目标字符相关描述的
            name = unicodedata.name(char)
            if 'LATIN SMALL LETTER N' in name:
                similar.add(char)
        except ValueError:
            continue
    # 手动补充跨语言视觉相似字符(如西里尔字母п、亚美尼亚字母ո)
    similar.update({'п', 'ո'})
    return sorted(similar)

# 获取'n'的相似字符列表
look_alike_chars = get_similar_chars('n')
print(look_alike_chars)

2. 参考Unicode官方文档

Unicode官方整理了《Confusable Characters》文档,其中列出了常见的视觉相似字符对,你可以根据文档提取对应字符的列表,手动构建正则字符集。

内容的提问来源于stack exchange,提问作者sanitizedUser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 12:33:29