我有这个简单的正则表达式:
text = re.sub("[إأٱآا]", "ا", text)
但是,我得到了这个(Python 2.7)错误:
TypeError: expected string or buffer
我是一个正则表达式的新手,我想这是一件很容易解决的问题,但是我是 不知道怎么样?感谢。
答案 0 :(得分:0)
re.sub
期望正则表达式作为第一个参数。你需要逃离模式中的左括号。使用\[
代替[
答案 1 :(得分:0)
很抱歉,我不能在评论部分中说明这一点。据我所知,re.sub没有任何错误。因为如果你将字符编码回unicode,你会得到以下的逐字。
text = re.sub("[\u0625\u0623\u0671\u0622\u0627]", "\u0627", text)
\u0627
取代\u0627
,但我不知道。我认为问题出在text
上。如果您可以执行print(text)
,那么我们可以查看其中是否有任何字符属于"[إأٱآا]"
== "[\u0625\u0623\u0671\u0622\u0627]"
只是一个quip,\u0627
是左边最小的垂直线; - )
在理解实际使用内容方面没什么帮助(只需在问题中复制整个语句并执行以下操作)
for x in mystr: print(x + '-' + str(ord(x)))
http://www.fileformat.info/info/unicode/char/0627/index.htm
<强> EDITED 强>
>>> 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
干杯!
答案 2 :(得分:0)
这就是我最终做到的方式:
sText = re.sub(ur"[\u0625|\u0623|\u0671|\u0622|\u0627]", ur"\u0627", sText)
谢谢大家的帮助。
答案 3 :(得分:0)
将所有字符串定义为unicode
,并且不要忘记在文件的标题中添加编码行:
#coding: utf-8
import re
text = re.sub(u"[إأٱآا]", u"ا", u"الآلهة")
print text
获得:
الالهة