首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阿拉伯字母在regex中使用范围

阿拉伯字母在regex中使用范围
EN

Stack Overflow用户
提问于 2014-12-29 09:01:03
回答 3查看 5.4K关注 0票数 6

在Python中使用Regex时,很容易使用方括号来表示一系列字符a-z,但这似乎不适用于其他语言,比如阿拉伯语:

代码语言:javascript
复制
import re
pattern = '[ي-ا]'
p = re.compile(pattern)

这将导致一个长错误报告,该报告以

代码语言:javascript
复制
raise error("bad character range")
sre_constants.error: bad character range

怎么解决这个问题呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-29 09:04:02

改用Unicode转义。

代码语言:javascript
复制
>>> re.compile('[\u0627-\u064a]')
<_sre.SRE_Pattern object at 0x237f460>
票数 8
EN

Stack Overflow用户

发布于 2014-12-29 09:13:59

由于阿拉伯字符是从右到左呈现的,下面的更正字符串(从اي)被反向呈现(如果要确认,请尝试选择该字符串):

代码语言:javascript
复制
'[ا-ي]'

控制台输出:

代码语言:javascript
复制
>>> re.compile('[ا-ي]')
<_sre.SRE_Pattern object at 0x6001f0a80>

>>> re.compile('[ا-ي]', re.DEBUG)
in
  range (1575, 1610)
<_sre.SRE_Pattern object at 0x6001f0440>

所以您的模式'[ي-ا]'实际上是“从يا",这是一个无效的范围,因为ا的代码点小于ي的代码点。

为了防止混乱,Ignacio Vazquez-Abrams关于使用Unicode转义的建议是我提供的解决方案的一个很好的替代方案。

票数 11
EN

Stack Overflow用户

发布于 2021-05-13 02:17:43

这个经过批准的答案确实有效,但unicode [\u0627-\u064a]不包括“ا”(如“أ‘,’آ”或“إ”)等字母的变体,以及“و”(其变体“ؤ”)的变体。(我想评论/建议-编辑已批准的答案,但有一个队列)

因此,如果有人(重新)访问了这个问题,并且需要这些字母变体,一个对我更有用的unicode是\u0600-\u06FF,给出的答案:

代码语言:javascript
复制
pattern = re.compile('[\u0600-\u06FF]')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27685984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档