Python QSortFilterProxyModel的QRegExp-查找列表中的所有项

Python QSortFilterProxyModel的QRegExp-查找列表中的所有项,python,regex,qt,qregexp,qsortfilterproxymodel,Python,Regex,Qt,Qregexp,Qsortfilterproxymodel,我正在使用PyQt&一直在使用setFilterRegExp()和qsortFilterProxy模型。源模型输出整数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}%

我正在使用PyQt&一直在使用setFilterRegExp()和qsortFilterProxy模型。源模型输出整数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

从文档中,我认为^&$会找到每个数字的精确匹配项,但会找到所有数字的所有匹配项


许多人认为,字符类将其中的字符视为单个字符,除非使用范围。那么,什么呢

[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)$”

你能提供一个示例输入和你想要的输出吗。我重写了这个问题。感觉我已经提供了要求的信息,没有复制完整的QSqlTableModel类。嘿@Jerry。非常感谢,这非常好用。现在,一个新函数通过'newL=“|”将原始列表转换为字符串(2 | 3 | 4 | 5 | 8 | 9 | 10 | 18 | 19);返回“(“+newL+”)”。QSFPM的QRegExp现在是“^%s$%self.listastringforregexp()”@user2422819,不客气:),我注意到我在正则表达式中使用了
%
符号,而不是
$
,这是我的错误。