为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式和unicode

正则表达式和unicode

largeQ 2021-03-14 13:12:44
我有一个脚本,可以解析电视剧集的文件名(例如show.name.s01e02.avi),获取剧集的名称(从www.thetvdb.com API),然后自动将其重命名为更好的名称(显示名-[01x02 ] .avi)该脚本可以正常工作,直到您尝试在具有Unicode显示名称的文件上使用该脚本为止(我从未真正考虑过这一点,因为我拥有的所有文件都是英文的,所以大部分都属于[a-zA-Z0-9'\-])如何允许正则表达式匹配带重音符号的字符?目前,正则表达式的config部分看起来像..config['valid_filename_chars'] = """0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@£$%^&*()_+=-[]{}"'.,<>`~? """config['valid_filename_chars_regex'] = re.escape(config['valid_filename_chars'])config['name_parse'] = [    # foo_[s01]_[e01]    re.compile('''^([%s]+?)[ \._\-]\[[Ss]([0-9]+?)\]_\[[Ee]([0-9]+?)\]?[^\\/]*$'''% (config['valid_filename_chars_regex'])),    # foo.1x09*    re.compile('''^([%s]+?)[ \._\-]\[?([0-9]+)x([0-9]+)[^\\/]*$''' % (config['valid_filename_chars_regex'])),    # foo.s01.e01, foo.s01_e01    re.compile('''^([%s]+?)[ \._\-][Ss]([0-9]+)[\.\- ]?[Ee]([0-9]+)[^\\/]*$''' % (config['valid_filename_chars_regex'])),    # foo.103*    re.compile('''^([%s]+)[ \._\-]([0-9]{1})([0-9]{2})[\._ -][^\\/]*$''' % (config['valid_filename_chars_regex'])),    # foo.0103*    re.compile('''^([%s]+)[ \._\-]([0-9]{2})([0-9]{2,3})[\._ -][^\\/]*$''' % (config['valid_filename_chars_regex'])),]
查看完整描述

4 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

根据需要使用子范围[\u0000-\uFFFF]

您也可以使用re.UNICODE编译标志。文档说如果UNICODE设置,\w将匹配字符[0-9_]以及Unicode字符属性数据库中分类为字母数字的任何字符。


查看完整回答
反对 回复 2021-03-22
?
慕容708150

TA贡献1831条经验 获得超4个赞

Python的re模块不支持\ p {Letter}或\ X。但是,PyPI上的新正则表达式实现可以。


查看完整回答
反对 回复 2021-03-22
?
ibeautiful

TA贡献1993条经验 获得超5个赞

Jeffrey Friedl的精通正则表达式(精湛的书)中提到过,您可以使用\ p {Letter}来匹配被认为是字母的unicode内容。


查看完整回答
反对 回复 2021-03-22
  • 4 回答
  • 0 关注
  • 192 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信