0

我正在尝试使用 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 来匹配?有没有办法编写一个正则表达式来逃避任何自动进入它的特殊字符?解决这个问题的最佳方法是什么?

4

0 回答 0