我正在尝试使用 QRegExp 过滤 QSortFilterProxyModel 以匹配任何字符串列表。问题是字符串包含特殊字符,如:(
, )
, \
, /
, ?
, ,
, [
, ]
, {
, }
, :
, |
, .
,*
等。
这意味着我不能使用类似的东西:
r'\b(' + '|'.join(string_list) + r')\b'
我尝试将 QSortFilterProxyModel 的 filterAcceptsRow 子类化以检查字符串列表,例如:
def filterAcceptsRow(self, sourceRow, sourceParent):
index = self.sourceModel().index(sourceRow, 0, sourceParent)
item = self.sourceModel().itemFromIndex(index)
text = item.text()
if text in self.matchList:
return True
else:
return False
这可行,但与此相比非常慢:(我知道这仅匹配一个单词而不是列表,但我希望使用正则表达式正确实现的列表将比上面的代码更快。)
self.proxy.setFilterRegExp(QtCore.QRegExp(item.text(), QtCore.QRegExp.FixedString))
self.proxy.setFilterKeyColumn(3)
有没有办法让 QRegExp 获取字符串列表或 qstrings 或 qstringlist 来匹配?有没有办法编写一个正则表达式来逃避任何自动进入它的特殊字符?解决这个问题的最佳方法是什么?