正则表达式子函数不使用unicode字符串

时间:2013-12-31 19:46:24

标签: python regex string unicode python-2.5

我正在尝试使用Python的子功能,但我遇到了让它运行起来的问题。从我一直在做的故障排除中我相信它与字符串中的unicode字符有关。

# -*- coding: utf-8 -*-
reload(sys)
sys.setdefaultencoding('utf-8')
import re

someFunction(string):
    string = string.decode('utf-8')
    match = re.search(ur'éé', string)
if match:
    print >> sys.stderr, "It was found"
else:
    print >> sys.stderr, "It was NOT found"

    if isinstance(string, str):
    print >> sys.stderr, 'string is a string object'
elif isinstance(string, unicode):
    print >> sys.stderr, 'string is a unicode object'

    new_string = re.sub(ur'éé', ur'é:', string)
    return new_string

stringNew = 'éégktha'
returnedString = someFunction(stringNew)
print >> sys.stderr, "After printing it: " + returnedString

#At this point in the code string = 'éégktha'
returnString = someFunction(string)
print >> sys.stderr, "After printing it: " + returnedString

所以我想'é:gktha'。下面是我运行此代码时打印到错误日志的内容。

It was found
string is a unicode object
é:gktha
It was NOT found
string is a unicode object
éégktha

所以我认为它必须是带有传递给我的函数的字符串的东西。当我声明为unicode字符串或字符串文字,然后解码它时,找到模式。但是在传入的字符串中找不到该模式。我在想我的string = string.decode('utf-8')语句会转换传递给函数的任何字符串然后才会起作用。

我试图在python解释器中执行此操作,当我将string声明为unicode字符串时,它可以工作。

string = u'éégktha'

因此,为了模拟我声明字符串的函数,然后'解码'它,然后尝试我的正则表达式语句,它工作。

string = 'éégktha'
newString = string.decode('utf8')
string = re.sub(ur'éé', ur'é:', newString)
print string #é:gktha

此Web应用程序可与许多unicode字符一起使用。这是Python 2.5,在处理unicode字符时我总是很难。非常感谢任何帮助和知识。

1 个答案:

答案 0 :(得分:2)

您应该print someFunction返回的内容。

>>> string = 'éégktha'
>>> def someFunction(string):
...     #string = 'éégktha'
...     string = string.decode('utf8')
...     new_string = re.sub(ur'éé', ur'é:', string)
...     return new_string

>>> import re
>>> someFunction(string)
u'\xe9:gktha'
>>> print someFunction(string)
é:gktha

你的功能很好。在模拟中,当print解释器打印__str__ return返回的内容时,您__repr__打印new_string返回的内容。 / newString