栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python Unicode正则表达式匹配失败,并带有一些Unicode字符-错误或错误?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python Unicode正则表达式匹配失败,并带有一些Unicode字符-错误或错误?

这是模块中的错误,

re
并且已在
regex
模块中修复:

# -*- coding: utf-8 -*-from __future__ import unipre_literalsimport unipredataimport reimport regex  # $ pip install regexword = "किशोरी"def test(re_):    assert re_.search("^\w+$", word, flags=re_.UNICODE)print([unipredata.category(cp) for cp in word])print(" ".join(ch for ch in regex.findall("\x", word)))assert all(regex.match("\w$", c) for c in ["a", "u093f", "u0915"])test(regex)test(re)  # fails

输出结果显示,中有6个代码点

"किशोरी"
,但只有3个用户可感知的字符(扩展的字素簇)。 字符
打断一个单词是错误的 。 __ Unipre文本分段说:

词素 ,行边界和句子边界 不应出现在 字素 簇中 :换句话说,就确定这些其他边界的过程而言,字素簇应该是一个原子单位。

在这里,进一步的重点是我的

单词边界在docs中

b
定义为从
w
W
(或反向)的过渡:

请注意,形式上, b定义为 w和 W字符之间的边界(反之亦然)或 w与字符串的开头/结尾之间的边界,…

因此,构成单个字符的所有代码点都是

w
或全部
W
。在这种情况下
"किशोरी"
匹配
^w{6}$


从Python
2的文档

w
中:

如果设置了UNICODE,它将匹配字符[0-9_]加上 Unipre字符属性数据库中 分类为 字母数字的 任何 字符

在Python 3中:

匹配Unipre单词字符;这 包括可以在任何语言中的单词的一部分大多数字符 ,以及数字和下划线。

regex
文档:

“单词”字符的定义(问题#1693050):

“单词”字符的定义已扩展为Unipre。现在,它符合Unipre规范,网址为
http://www.unipre.org/reports/tr29/。这适用于
w, W, b和 B。

根据unipre.org

U+093F
DEVANAGARI VOWEL SIGNI
),它是字母和数字,因此即使我们遵循并非基于单词边界的定义,
regex
也应该考虑它
w



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/617711.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号