删除文件名中所有“非法”字符,同时保留所有其他字符

时间:2019-05-02 17:38:44

标签: python regex

EDIT2:我误解了正则表达式,它确实起作用了,实际上某些重音字符由触发正则表达式的2个字符组成。请无视。 编辑:请忘记整个“非法”字符部分,我误解了原始开发人员的评论。

我从github上创建了一个管理文件名的项目,但是在此过程中,它“为每个replacedict键删除了不是字母数字(+非拉丁字符),空格,破折号,下划线,点或括号的任何内容”

我希望它只删除禁止使用的字符,同时保留所有其他内容。

我已经尝试过在各种正则表达式帮助器站点上修改正则表达式,但没有成功。

for key, val in replacedict.items():
    # Remove anything that is not an alphanumeric (+non-latin chars),
    # space, dash, underscore, dot or parentheses for every replacedict key
    val = re.sub(r'(?u)[^-\w.( )]', '_', val)
    # folder dirs and the filename are now max 250 bytes long:
    val = val.encode('utf-8')[:250].decode('utf-8', 'ignore')
    replacedict[key] = val

1 个答案:

答案 0 :(得分:1)

尝试使用此正则表达式,该正则表达式仅严格保留您要保留的字符,并用#include "gtest/gtest.h" #include <cmath> TEST(Pow, Two) { EXPECT_EQ(4, std::pow(2,2)); } 除去其余字符。

_

不必将[^-a-zA-Z0-9 _.()] 与Unicode一起使用,因为我们不希望\w甚至匹配其他非英语字母,而只保留英语字母。

Regex Demo

Python代码,

\w

确保用import re s = 'abc #$ data 汉字 I want #$$#@$#$ removed also these ÀÊ also' print(re.sub(r'[^-a-zA-Z0-9 _.()]', '_', s)) 替换不需要的字符并在其后打印,

_

尝试使用此正则表达式,看看是否仍然遇到问题,让我知道是否还有某些字符无法正确替换为abc __ data __ I want ________ removed also these __ also