QRegExp可以执行MULTILINE和DOTALL匹配吗?

时间:2013-12-18 14:17:53

标签: python regex pyqt4 qregexp

最近我一直在研究PyQt程序。一开始我使用python re模块来处理正则表达式,但python字符串和QString之间的转换让我感到困惑。所以我试着改变QRegExp。

但是,我想使用python的IGNORECASE,MULTILINE,DOTALL。我发现QRegExp.setCaseSensitivity()替换了re.I,但我找不到其余的两个功能。有人可以帮忙吗?

或告诉我如何将QString转换为python字符串?正则表达式模式和数据都是由用户输入的,因此它们的类型是QString。

1 个答案:

答案 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步骤。