开发者社区> 问答> 正文

在正则式中使用Unicode

你正在使用正则表达式处理文本,但是关注的是Unicode字符处理。

展开
收起
哦哦喔 2020-04-16 19:18:55 1097 0
1 条回答
写回答
取消 提交回答
  • 默认情况下 re 模块已经对一些Unicode字符类有了基本的支持。 比如, \\d 已经匹配任意的unicode数字字符了:
    
    >>> import re
    >>> num = re.compile('\d+')
    >>> # ASCII digits
    >>> num.match('123')
    <_sre.SRE_Match object at 0x1007d9ed0>
    >>> # Arabic digits
    >>> num.match('\u0661\u0662\u0663')
    <_sre.SRE_Match object at 0x101234030>
    >>>
    如果你想在模式中包含指定的Unicode字符,你可以使用Unicode字符对应的转义序列(比如 \uFFF 或者 \UFFFFFFF )。 比如,下面是一个匹配几个不同阿拉伯编码页面中所有字符的正则表达式:
    
    >>> arabic = re.compile('[\u0600-\u06ff\u0750-\u077f\u08a0-\u08ff]+')
    >>>
    当执行匹配和搜索操作的时候,最好是先标准化并且清理所有文本为标准化格式(参考2.9小节)。 但是同样也应该注意一些特殊情况,比如在忽略大小写匹配和大小写转换时的行为。
    
    >>> pat = re.compile('stra\u00dfe', re.IGNORECASE)
    >>> s = 'straße'
    >>> pat.match(s) # Matches
    <_sre.SRE_Match object at 0x10069d370>
    >>> pat.match(s.upper()) # Doesn't match
    >>> s.upper() # Case folds
    'STRASSE'
    >>>
    
    2020-04-17 09:31:28
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载