您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

这是模块中错误,re并且已在regex模块中修复:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import unicodedata
import re
import regex  # $ pip install regex

word = "??????"


def test(re_):
    assert re_.search("^\\w+$", word, flags=re_.UNICODE)

print([unicodedata.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个用户可感知的字符(扩展的字素簇)。 Unicode文本分段说:

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

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

单词边界在docs中\b定义为从\w\W(或反向)的过渡:

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

因此,构成单个字符的所有代码点都是\w或全部\W在这种情况下"??????"匹配^\w{6}$

Python 2@L_502_7@:

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

Python 3中

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

regex文档:

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

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

根据unicode.org U+093FDEVANAGARI VOWEL SIGN I),它是字母和数字,因此即使我们遵循并非基于单词边界的定义,regex也应该考虑它\w

python 2022/1/1 18:44:10 有299人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶