0

我正在使用 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。

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

许多问候

4

1 回答 1

1

问题是字符类将其中的字符视为单独的字符,除非使用范围。所以呢:

[2, 3, 4, 5, 8, 9, 10, 18, 19]

将匹配的是:2, ,, , 3, ,(again), [...], 1, 9, ,(again), , 1(again) 等。

正则表达式实际上必须是这样的:

proxy.setFilterRegExp(QRegExp('^(2|3|4|5|8|9|10|18|19)$'))

或尽可能缩短:

proxy.setFilterRegExp(QRegExp('^([234589]|1[089])$'))

我想您将不得不更改sourceModel.wantedNumbersList()显示方式(一些字符串操作)或手动输入。

如果您通过字符串操作来执行此操作,我建议去掉方括号并将逗号后跟空格替换为 pipe |,然后'^(%s)$'用于正则表达式。

于 2014-09-04T06:57:07.697 回答