在Python中使用Regex时,很容易使用方括号来表示一系列字符a-z,但这似乎不适用于其他语言,比如阿拉伯语:
import re
pattern = '[ي-ا]'
p = re.compile(pattern)这将导致一个长错误报告,该报告以
raise error("bad character range")
sre_constants.error: bad character range怎么解决这个问题呢?
发布于 2014-12-29 09:04:02
改用Unicode转义。
>>> re.compile('[\u0627-\u064a]')
<_sre.SRE_Pattern object at 0x237f460>发布于 2014-12-29 09:13:59
由于阿拉伯字符是从右到左呈现的,下面的更正字符串(从ا到ي)被反向呈现(如果要确认,请尝试选择该字符串):
'[ا-ي]'控制台输出:
>>> 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转义的建议是我提供的解决方案的一个很好的替代方案。
发布于 2021-05-13 02:17:43
这个经过批准的答案确实有效,但unicode [\u0627-\u064a]不包括“ا”(如“أ‘,’آ”或“إ”)等字母的变体,以及“و”(其变体“ؤ”)的变体。(我想评论/建议-编辑已批准的答案,但有一个队列)
因此,如果有人(重新)访问了这个问题,并且需要这些字母变体,一个对我更有用的unicode是\u0600-\u06FF,给出的答案:
pattern = re.compile('[\u0600-\u06FF]')https://stackoverflow.com/questions/27685984
复制相似问题