2024-04-27 23:11:49 发布
网友
我有一个简单的正则表达式:
text = re.sub("[إأٱآا]", "ا", text)
但是,我得到一个(Python 2.7)错误:
TypeError: expected string or buffer
我是一个regex新手,我想这是一个简单的事情来解决,但我 不知道怎么做?谢谢。你知道吗
将所有字符串定义为unicode,不要忘记在文件头中添加编码行:
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)
\u0627
我认为问题在于text。如果您可以执行print(text),那么我们可以查看其中是否有属于"[إأٱآا]"=="[\u0625\u0623\u0671\u0622\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作为第一个参数。你需要在你的模式中避开左括号。用\[代替[
re.sub
\[
[
将所有字符串定义为
unicode
,不要忘记在文件头中添加编码行:要获得:
很抱歉,我无法将此内容放在评论部分。世界上没有什么不对的回复sub据我所知。因为如果你把字符编码回unicode,你会得到下面的一字不差。你知道吗
\u0627
代替\u0627
,我不知道。你知道吗我认为问题在于
text
。如果您可以执行print(text)
,那么我们可以查看其中是否有属于"[إأٱآا]"
=="[\u0625\u0623\u0671\u0622\u0627]"
一句俏皮话
\u0627
是左边最小的垂直线;-)对理解它的实际用途几乎没有帮助(只需复制问题中的完整的语句并执行以下操作)
http://www.fileformat.info/info/unicode/char/0627/index.htm
编辑
所以从本质上说,一切都很好,错误就在别处。
我认为这再现了其他地方发生的错误,现在是
干杯!你知道吗
re.sub
要求regex作为第一个参数。你需要在你的模式中避开左括号。用\[
代替[
相关问题 更多 >
编程相关推荐