阿拉伯文正则表达式

2024-04-27 23:11:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的正则表达式:

    text = re.sub("[إأٱآا]", "ا", text)

但是,我得到一个(Python 2.7)错误:

TypeError: expected string or buffer

我是一个regex新手,我想这是一个简单的事情来解决,但我 不知道怎么做?谢谢。你知道吗


Tags: ortextrestringbuffer错误事情regex
3条回答

将所有字符串定义为unicode,不要忘记在文件头中添加编码行:

#coding: utf-8

import re

text = re.sub(u"[إأٱآا]", u"ا", u"الآلهة")

print text

要获得:

الالهة

很抱歉,我无法将此内容放在评论部分。世界上没有什么不对的回复sub据我所知。因为如果你把字符编码回unicode,你会得到下面的一字不差。你知道吗

text = re.sub("[\u0625\u0623\u0671\u0622\u0627]", "\u0627", text)
  1. 因为它是阿拉伯语,请记住它是从右到左的,视觉效果有点混乱,仅此而已。
  2. 它实际上是试图用一个字符替换一组字符。你知道吗
  3. 尽管人们为什么要用\u0627代替\u0627,我不知道。你知道吗

我认为问题在于text。如果您可以执行print(text),那么我们可以查看其中是否有属于"[إأٱآا]"=="[\u0625\u0623\u0671\u0622\u0627]"

一句俏皮话\u0627是左边最小的垂直线;-)

对理解它的实际用途几乎没有帮助(只需复制问题中的完整的语句并执行以下操作)

for x in mystr: print(x + '-' + str(ord(x)))

http://www.fileformat.info/info/unicode/char/0627/index.htm

编辑

>>> re.sub(myset,myrep,text)
u'\u0627\u0627\u0627abc'
>>> res=re.sub(myset,myrep,text)
>>> res
u'\u0627\u0627\u0627abc'
>>> myrep
u'\u0627'
>>> myset
u'[\u0625\u0623\u0671\u0622\u0627]'
>>> text
u'\u0625\u0623\u0623abc'
>>> print(res)
اااabc
>>> print(myrep)
ا
>>> print(myset)
[إأٱآا]
>>> print(text)
إأأabc
>>>

所以从本质上说,一切都很好,错误就在别处。

我认为这再现了其他地方发生的错误,现在是

>>> print(u'\u0625'+ord(u'\u0625'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: coercing to Unicode: need string or buffer, int found

干杯!你知道吗

re.sub要求regex作为第一个参数。你需要在你的模式中避开左括号。用\[代替[

相关问题 更多 >