Python QSortFilterProxyModel的QRegExp-查找列表中的所有项
我正在使用PyQt&一直在使用setFilterRegExp()和qsortFilterProxy模型。源模型输出整数1-30,QSFPM将过滤1-30,只在提供的列表中留下数字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}%
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,不客气:),我注意到我在正则表达式中使用了%
符号,而不是$
,这是我的错误。