最近我一直在研究PyQt程序。一开始我使用python re模块来处理正则表达式,但python字符串和QString之间的转换让我感到困惑。所以我试着改变QRegExp。
但是,我想使用python的IGNORECASE,MULTILINE,DOTALL。我发现QRegExp.setCaseSensitivity()替换了re.I,但我找不到其余的两个功能。有人可以帮忙吗?
或告诉我如何将QString转换为python字符串?正则表达式模式和数据都是由用户输入的,因此它们的类型是QString。
答案 0 :(得分:2)
Qt的QRegExp类完全没问题,但是python的re模块更加灵活。一般来说字符串处理也是如此 - 如果你需要在PyQt程序中进行大量的字符串处理,如果可以的话,通常最好在python中完成。
转换QString非常简单。在python2中,您只需要执行:
string = unicode(qstring)
并且通常不需要将其转换回来:任何需要QString的Qt api都将由PyQt自动从python字符串转换。
QString转换的更通用解决方案是使用sip module在全局基础上进行此操作(在安装PyQt的任何地方都应该可以使用它)。这需要在PyQt程序开始时,在导入任何PyQt模块之前完成,如下所示:
import sip
sip.setapi('QString', 2)
from PyQt4 import QtCore, QtGui
执行此操作后,任何通常返回QString的Qt API都将返回python unicode对象。有关此功能的更多信息,请参阅PyQt文档中的Selecting Incompatible APIs。
虽然最初可能需要多做一些工作,但从长远来看,走这条路线可能是最好的。首先,如果您需要这样做,它将更容易移植到python3。对于python3,默认选择版本2 API,因此不需要上面的setapi
步骤。