当前位置:  开发笔记 > 编程语言 > 正文

正则表达式和unicode

如何解决《正则表达式和unicode》经验,为你挑选了2个好方法。

我有一个解析电视剧集文件名的脚本(例如show.name.s01e02.avi),抓取剧集名称(来自www.thetvdb.com API)并自动将它们重命名为更好的名称(显示名称 - [01x02] ]的.avi)

该脚本工作正常,直到你尝试在具有Unicode显示名称的文件上使用它(我从未真正考虑过的事情,因为我拥有的所有文件都是英文的,所以大部分文件全部都在内[a-zA-Z0-9'\-])

如何允许正则表达式匹配重音字符等?目前正则表达式的配置部分看起来像..

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'])),
]

Mark Cidade.. 16

使用[\u0000-\uFFFF]您想要的子范围.

您还可以使用re.UNICODE编译标志.文档说if if UNICODEset,\w将匹配字符[0-9_]以及Unicode字符属性数据库中分类为字母数字的内容.

另见http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-05/2560.html.



1> Mark Cidade..:

使用[\u0000-\uFFFF]您想要的子范围.

您还可以使用re.UNICODE编译标志.文档说if if UNICODEset,\w将匹配字符[0-9_]以及Unicode字符属性数据库中分类为字母数字的内容.

另见http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-05/2560.html.



2> MRAB..:

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

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有