QRegExp用于QSortFilterProxyModel - 查找列表中的所有项目

时间:2014-09-03 19:24:18

标签: python regex qt qregexp qsortfilterproxymodel

使用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。

从文档中,我认为^& $会找到每个匹配的完全匹配,但会找到所有出现的所有数字。

许多问候

1 个答案:

答案 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()替换空格后跟空格,然后用|表示正则表达式。