gpt4 book ai didi

Python regex\w 不匹配组合变音符号?

转载 作者:太空狗 更新时间:2023-10-29 20:23:26 27 4
gpt4 key购买 nike

我有一个带有组合变音符号的 UTF8 字符串。我想将它与 \w 正则表达式序列匹配。它匹配带有重音符号的字符,但如果存在带有组合变音符号的拉丁字符则不匹配。

>>> re.match("a\w\w\wz", u"aoooz", re.UNICODE)
<_sre.SRE_Match object at 0xb7788f38>
>>> print u"ao\u00F3oz"
aoóoz
>>> re.match("a\w\w\wz", u"ao\u00F3oz", re.UNICODE)
<_sre.SRE_Match object at 0xb7788f38>
>>> re.match("a\w\w\wz", u"aoo\u0301oz", re.UNICODE)
>>> print u"aoo\u0301oz"
aóooz

(看起来 SO markdown 处理器在处理上面的组合变音符号时遇到了问题,但在最后一行有一个 ́)

有没有办法将变音符号与 \w 相匹配?我不想对文本进行规范化,因为该文本来自文件名,而且我还不想执行整个“文件名 unicode 规范化”。这是 Python 2.5。

最佳答案

我刚刚注意到 pypi 上有一个新的“regex”包。 (如果我理解正确的话,它是一个新包的测试版本,有朝一日将取代 stdlib re 包)。

关于 unicode,它似乎(除其他外)有更多可能性。例如,它支持\X,用于匹配单个字素(无论是否使用组合)。它还支持对 unicode 属性、 block 和脚本进行匹配,因此您可以使用 \p{M} 来引用组合标记。前面提到的\X等同于\P{M}\p{M}*(一个不是组合标记的字符,后跟零个或多个组合标记).

请注意,这使 \X 或多或少成为 . 的 unicode 等效项,而不是 \w,因此在您的情况下,\w\p{M}* 是你需要的。

它(目前)是一个非 stdlib 包,我不知道它的准备情况如何(而且它不在二进制发行版中),但你可能想试一试,因为它似乎是您问题的最简单/最“正确”的答案。 (否则,我认为您会明确使用字符范围,如我对上一个答案的评论中所述)。

另见 this page包含有关 unicode 正则表达式的信息,其中可能还包含一些对您有用的信息(并且可以作为 regex 包中实现的某些内容的文档)。

关于Python regex\w 不匹配组合变音符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3141032/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com