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を取得する方法はありますか? 入ってくる特殊文字を自動的にエスケープする正規表現を書く方法はありますか? これにアプローチする最良の方法は何ですか?