QREgExp For QSortFilterProxyModel - 查找列表中的所有项目
正在使用PyQt &在使用setFilterRegExp()和QSortFilterProxyModel时遇到困难。源模型输出整数1-30,而QSFPM将过滤1-30,仅留下提供的列表中的数字。在[1,2,3,4,5,8,9]被留QREgExp For QSortFilterProxyModel - 查找列表中的所有项目
proxy.setFilterRegExp(QRegExp('^[2, 3, 4, 5, 8, 9, 10, 18, 19]{1,1}%'))
两个结果:
proxy.setFilterRegExp(QRegExp('^%s{1,1}%' % sourceModel.wantedNumbersList()))
如果手动输入所希望的数字。期望的数字> = 10不会留在结果中,并且出于某种原因包含1。
也试过:
proxy.setFilterRegExp(RegExp('^[2|3|4|15]{1,1}$')))
..这给了[1,2,3,4,5]即解释所需的数字15作为1 & 5.
从文档,我想^ & $会找到每个匹配的确切匹配项,但会查找所有数字的所有匹配项。
许多方面
的事情是,除非字符使用范围时,班对待字符内它们作为单个字符。那么,是什么:
[2, 3, 4, 5, 8, 9, 10, 18, 19]
将匹配是:2
,,
,3
,,
(再次),[...],1
,9
,,
(再次),1
(再次),等等。
什么正则表达式有看起来像居然是:
proxy.setFilterRegExp(QRegExp('^(2|3|4|5|8|9|10|18|19)$'))
或缩短尽可能:
proxy.setFilterRegExp(QRegExp('^([234589]|1[089])$'))
我想你将不得不改变sourceModel.wantedNumbersList()
如何出现(一些字符串操作)或手动输入。
如果你通过字符串操作,我会建议剥掉方括号并用管道|
替换逗号后跟空格,然后使用'^(%s)$'
作为正则表达式。
嘿@Jerry。非常感谢,这完美地工作。一个新的函数现在将原始列表转换为字符串(2 | 3 | 4 | 5 | 8 | 9 | 10 | 18 | 19),通过'newL =“|”.join([str(t)for t in self.originalIntegerList()]);返回“(”+ newL +“)”'。 QSFPM的QRegExp现在是'“%% s $”%self.listAsStringForRegExp()'。 – user2422819 2014-09-04 07:42:42
@ user2422819不客气:)我注意到我在我的正则表达式中使用'%'符号而不是'$',这是我的错。 – Jerry 2014-09-04 07:44:40
你能提供一个样本输入和你想要的输出吗? – 2014-09-03 19:28:34
Hi Fede。已经改写了这个问题。感觉我提供了所需的信息,而不需要复制完整的QSqlTableModel类。 – user2422819 2014-09-03 20:27:14