0

QSortFilterProxyModel を QRegExp でフィルタリングして、文字列のリストのいずれかに一致させようとしています。問題は、文字列(に、、、、、、、、、、、、、、、、)などの特殊\文字が含まれていることです。/?,[]{}:|.*

これは、次のようなものを使用できないことを意味します。

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

これは機能しますが、これに比べて非常に遅いです: (これはリストではなく1つの単語に一致するだけであることは知っていますが、正規表現で適切に実装されたリストが上記のコードよりも高速になることを願っています.)

self.proxy.setFilterRegExp(QtCore.QRegExp(item.text(), QtCore.QRegExp.FixedString))
self.proxy.setFilterKeyColumn(3)

文字列またはqstringのリストまたはqstringlistを照合するためにQRegExpを取得する方法はありますか? 入ってくる特殊文字を自動的にエスケープする正規表現を書く方法はありますか? これにアプローチする最良の方法は何ですか?

4

0 に答える 0