如何从文本中删除所有零宽度空格?

如何从文本中删除所有零宽度空格?

我知道如何使用正则表达式在编辑程序中执行批量搜索和替换任务,但我没有或找不到零宽度空格 unicode 的完整列表。我快速搜索了谷歌,发现 U+200B 是 ZWS,但肯定还有很多其他的。我试图找到在线工具来完成这项工作,但没有成功。他们提供字数统计、删除所有空格或文档比较工具,但没有 ZWS 检测器或删除器。

这些字符不被视为空格,尽管它们看起来像是。它们是特殊字符,如 %、* 或 #,但却是不可见的。

有什么帮助吗?

答案1

要使用 UTF-16 按 Unicode 代码点进行搜索,您可以使用例如\x{200B}。无论文件是用 UTF-8 还是 UTF-16 编码,它都有效。

当然你也可以使用其他标签,例如用。。。来代替没有什么。

或者您也可以使用高级功能在文件中查找对于子文件夹中的多个(已过滤)文件。

在此处输入图片描述

答案2

为了匹配所有*零宽度空白字符,您应该匹配“格式”类别统一码。

\p{Cf}

查看测试:https://regex101.com/r/AS2wLz/1

* 我说的“全部”是指在“具有 White_Space=no 属性的相关 Unicode 字符”表中列出的所有字符维基百科文章“空白字符”以及其他包括在类别中Cf

答案3

在 Python 中,你可以使用以下命令删除 ZWSP:

(r"\u200b", "", re.MULTILINE),

请参阅下面的代码,还有其他替代品

# Directory-ul în care vrei să aplici căutarea și înlocuirea cu regex
directory = "c:\\Folder-Oana\\extracted\\translated"

# Lista cu regex-urile și înlocuirile corespunzătoare
regex_and_replace = [
    (r"\\\\.*$", "", 0),
    (r"\\.*\\$", "", 0),
    (r"\\.*$", "", 0),
    (r"\\\\.*$", "", re.MULTILINE),
    (r"\\.*\\$", "", re.MULTILINE),
    (r"\\.*$", "", re.MULTILINE),
    (r"\u200b", "", re.MULTILINE),
    (r'<p><link rel="canonical"', '<link rel="canonical"', 0),
    (r'<p><p class=', '<p class=', 0),
    (r"<p></p>", "", 0),
    # Adaugă alte regex-uri și înlocuiri aici
]

# Parcurge toate fișierele din director
for filename in os.listdir(directory):
    file_path = os.path.join(directory, filename)

    # Verifică dacă este un fișier și obține conținutul
    if os.path.isfile(file_path):
        with open(file_path, 'r', encoding='utf-8') as file:
            file_content = file.read()  # Define 'file_content' for each file

            # Aplică fiecare regex și înlocuire în listă
            for regex, replace, flags in regex_and_replace:
                file_content = re.sub(regex, replace, file_content, flags=flags)

            # Scrie conținutul actualizat înapoi în fișier
            with open(file_path, 'w', encoding='utf-8') as file:
                file.write(file_content)

        print(f"Procesat fișierul: {filename}")

# Call the function to delete duplicate files
delete_duplicate_files(directory)

相关内容