使用PyQt&坚持使用带有QSortFilterProxyModel的setFilterRegExp()。源模型输出整数1-30,QSFPM输出1-30,只留下提供列表中的数字。
proxy.setFilterRegExp(QRegExp('^%s{1,1}%' % sourceModel.wantedNumbersList()))
如果手动输入所需的数字:
proxy.setFilterRegExp(QRegExp('^[2, 3, 4, 5, 8, 9, 10, 18, 19]{1,1}%'))
都导致[1,2,3,4,5,8,9]被遗忘。期望的数字> = 10不在结果中,并且由于某种原因包括1。
也尝试过:
proxy.setFilterRegExp(RegExp('^[2|3|4|15]{1,1}$')))
..给出[1,2,3,4,5],即将所需数字15解释为1& 5。
从文档中,我认为^& $会找到每个匹配的完全匹配,但会找到所有出现的所有数字。
许多问候
答案 0 :(得分:1)
问题在于,除非使用范围,否则字符类会将其中的字符视为单个字符。那么,是什么:
[2, 3, 4, 5, 8, 9, 10, 18, 19]
匹配为:2
,,
,3
,,
(再次),[...],1
,{{1 },9
(再次),, ,
(再次)等等。
正则表达式的含义实际上是:
1
尽可能缩短:
proxy.setFilterRegExp(QRegExp('^(2|3|4|5|8|9|10|18|19)$'))
我猜你必须改变proxy.setFilterRegExp(QRegExp('^([234589]|1[089])$'))
出现的方式(一些字符串操作)或手动输入。
如果你是通过字符串操作来做的,我建议剥去方括号并用管道sourceModel.wantedNumbersList()
替换空格后跟空格,然后用|
表示正则表达式。