Python 正则表达式匹配 Unicode 属性

2025-01-14 08:50:00
admin
原创
122
摘要:问题描述:Perl 和一些其他当前的正则表达式引擎支持正则表达式中的 Unicode 属性,例如类别。例如,在 Perl 中,您可以使用p{Ll}来匹配任意小写字母,或p{Zs}任何空格分隔符。我没有在 Python 的 2.x 和 3.x 版本中看到对此的支持(非常遗憾)。有人知道获得类似效果的好策略吗?欢...

问题描述:

Perl 和一些其他当前的正则表达式引擎支持正则表达式中的 Unicode 属性,例如类别。例如,在 Perl 中,您可以使用p{Ll}来匹配任意小写字母,或p{Zs}任何空格分隔符。我没有在 Python 的 2.x 和 3.x 版本中看到对此的支持(非常遗憾)。有人知道获得类似效果的好策略吗?欢迎提出自己开发的解决方案。


解决方案 1:

regex模块(标准模块的替代品re)支持带有语法的 Unicode 代码点属性p{}

解决方案 2:

您是否尝试过Ponyguruma,这是绑定到Oniguruma正则表达式引擎的 Python 工具?在该引擎中,您可以简单地说p{Armenian}匹配亚美尼亚字符。p{Ll}或者p{Zs}也可以。

解决方案 3:

您可以在每个字符上精心使用 unicodedata:

import unicodedata

def strip_accents(x):
    return u''.join(c for c in unicodedata.normalize('NFD', x) if unicodedata.category(c) != 'Mn')

解决方案 4:

说到自主开发的解决方案,前段时间我编写了一个小程序来做这件事 - 将写为 的 unicode 类别转换为从 unicode规范p{...}(v.5.0.0)中提取的一系列值。仅支持类别(例如:、),并且仅限于 BMP。我将其发布在这里以防有人觉得它有用(尽管 Oniguruma 确实似乎是一个更好的选择)。L`Zs`

使用示例:

>>> from unicode_hack import regex
>>> pattern = regex(r'^\\p{Lu}(\\p{L}|\\p{N}|_)*')
>>> print pattern.match(u'疂_1+2').group(0)
疂_1
>>>

这是源代码。还有一个JavaScript 版本,使用相同的数据。

解决方案 5:

您说得对,Python 正则表达式解析器不支持 Unicode 属性类。

如果你想做一个漂亮的黑客,那通常会很有用,你可以创建一个预处理器,扫描字符串以查找此类标记(p{M}或其他标记)并将它们替换为相应的字符集,例如,p{M}将变成[/u0300–/u036F/u1DC0–/u1DFF/u20D0–/u20FF/uFE20–/uFE2F],并且P{M}将变成[^/u0300–/u036F/u1DC0–/u1DFF/u20D0–/u20FF/uFE20–/uFE2F]

人们会感谢你的。:)

解决方案 6:

请注意,虽然p{Ll}在 Python 正则表达式中没有等效项,但p{Zs}应该由 覆盖'(?u)s'(?u)正如文档所述,“使 \w、\W、\b、\B、\d、\D、\s 和 \S 依赖于 Unicode 字符属性数据库。” 和s表示任何空格字符。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2545  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1551  
  建筑工程全生命周期涉及从项目规划、设计、施工到运营维护等多个复杂阶段,每个阶段都产生和依赖大量信息。PLM(产品生命周期管理)系统作为一种整合数据、流程和人员的数字化解决方案,正逐渐成为建筑行业实现高效协同与可持续发展的关键支撑。通过数字化转型,PLM系统能够优化各阶段的工作流程,提升项目整体质量和效率,为建筑工程的全...
plm是什么软件   1  
  产品生命周期管理(PLM)系统在企业资源成本率优化方面发挥着至关重要的作用。通过构建有效的数据模型,PLM系统能够整合企业各个环节的数据,为资源成本的精准分析和优化提供有力支持。这不仅有助于企业降低成本,还能提升产品质量和市场竞争力。PLM系统概述PLM系统是一种用于管理产品从概念设计到退役全生命周期过程中所有信息和流...
PLM项目管理软件   1  
  产品生命周期管理(PLM)系统在现代企业的产品研发、生产与管理过程中扮演着至关重要的角色。它整合了从产品概念设计到产品退役的全生命周期数据与流程,助力企业提升效率、降低成本并增强创新能力。随着技术的不断发展,到 2025 年,PLM 系统将具备一系列核心功能模块,这些模块将深度影响企业的运营与发展。产品数据管理模块产品...
plm是什么意思   0  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用