Python 阿拉伯文正则表达式给出TypeError
我有一个简单的正则表达式:Python 阿拉伯文正则表达式给出TypeError,python,regex,arabic,Python,Regex,Arabic,我有一个简单的正则表达式: text = re.sub("[إأٱآا]", "ا", text) 但是,我得到了以下(Python 2.7)错误: 我是一个regex新手,我想这是一个简单的事情来修复,但我 不知道怎么做?谢谢。re.sub希望正则表达式作为第一个参数。您需要在模式中转义左括号。使用\[而不是[re.sub需要正则表达式作为第一个参数。您需要在模式中转义左括号。使用\[而不是[很抱歉,我无法将其放在评论部分。据我所知,re.sub中没有任何错误。因为如果您将字符编码回
text = re.sub("[إأٱآا]", "ا", text)
但是,我得到了以下(Python 2.7)错误:
我是一个regex新手,我想这是一个简单的事情来修复,但我
不知道怎么做?谢谢。
re.sub
希望正则表达式作为第一个参数。您需要在模式中转义左括号。使用\[
而不是[re.sub
需要正则表达式作为第一个参数。您需要在模式中转义左括号。使用\[
而不是[
很抱歉,我无法将其放在评论部分。据我所知,re.sub中没有任何错误。因为如果您将字符编码回unicode,则会得到下面的逐字记录
text = re.sub("[\u0625\u0623\u0671\u0622\u0627]", "\u0627", text)
因为它是阿拉伯语,请记住它是从右到左的,视觉效果有点混乱,仅此而已。
它实际上是试图用一个字符替换一组字符
虽然人们为什么要用\u0627
取代\u0627
,但我不知道
我认为问题在于text
。如果你能做print(text)
,那么我们可以看到其中是否有属于“[code>”
=”[\u0625\u0623\u0671\u0622\u0627]”
简单地说,\u0627
是左边最小的垂直线;-)
在理解它的实际用途方面没有什么帮助(只需复制问题中的整个语句并执行以下操作)
已编辑
>>> 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
打印(u'\u0625'+ord(u'\u0625'))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:强制使用Unicode:需要字符串或缓冲区,找到int
干杯!很抱歉,我无法将此内容放在评论部分。据我所知,re.sub中没有任何错误。因为如果您将字符编码回unicode,您将获得以下逐字记录
text = re.sub("[\u0625\u0623\u0671\u0622\u0627]", "\u0627", text)
\u0627
取代\u0627
,但我不知道text
。如果你能做print(text)
,那么我们可以看到其中是否有属于“[code>”
=”[\u0625\u0623\u0671\u0622\u0627]”
简单地说,
\u0627
是左边最小的垂直线;-)在理解它的实际用途方面没有什么帮助(只需复制问题中的整个语句并执行以下操作)
已编辑
>>> 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
打印(u'\u0625'+ord(u'\u0625'))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:强制使用Unicode:需要字符串或缓冲区,找到int
干杯!我终于做到了:
sText = re.sub(ur"[\u0625|\u0623|\u0671|\u0622|\u0627]", ur"\u0627", sText)
谢谢大家的帮助。我最终就是这样做的:
sText = re.sub(ur"[\u0625|\u0623|\u0671|\u0622|\u0627]", ur"\u0627", sText)
谢谢大家的帮助。将所有字符串定义为
unicode
,不要忘记在文件头中添加编码行:
#coding: utf-8
import re
text = re.sub(u"[إأٱآا]", u"ا", u"الآلهة")
print text
要获得:
الالهة
将所有字符串定义为
unicode
,不要忘记在文件头中添加编码行:
#coding: utf-8
import re
text = re.sub(u"[إأٱآا]", u"ا", u"الآلهة")
print text
要获得:
الالهة
它一定与编码有关,你确定它是UTF8吗?阿拉伯语是RTL,这让你很反感;Python看不到你的代码,就像它在这里的显示方式一样。例如,第二个
[
实际上是一个]
这是镜像显示的,看起来像第二个字符串的大部分内容实际上都在第一个字符串中,反之亦然。这一定与编码有关,你确定它是UTF8吗?阿拉伯语是RTL,这让你很反感;Python看不到你的代码,就像这里显示的那样。例如,第二个[
实际上是一个]
显示的是镜像的,看起来像第二个字符串的大部分内容实际上在第一个字符串中,反之亦然。本质上,错误在于您试图将int
添加到str
中。int>128,因此它抱怨缓冲区。@BenderRodriguez您能找到添加的位置吗str
和int
?如果我写的东西不清楚,请告诉我,我可以提高我的写作水平。本质上,错误在于您试图在str
中添加int
。int>128,因此它会抱怨缓冲区。@BenderRodriguez您是否能够找到添加str
和