我正在尝试这个我发现的示例代码,它真的非常好。我也试图找出相同的东西来找到一个项目并滚动到它,但是这次我想匹配具有EXACT WORD "cat"的字符串。
示例匹配:
猫
汤姆猫
狗和猫
超级猫
为了使它非常简单,我只是想匹配字符串中的确切单词。以这个示例代码为例:
import re
s= "1 tom cat"
s2 = "2 thundercat"
if re.search(r'\bcat\b',s2):
print("There is an EXACT word cat in that string")
else:
print("There is NO EXACT word cat in that string")
Input: s
Output: There is an EXACT word cat in that string
Input: s2
Output: There is NO EXACT word cat in that string
但是这次我使用正则表达式r'\bcat\b'
来检查字符串是否有确切的单词 cat AND SCROLL
我对其进行了配置并尝试了此代码。我只是做了一些小的改动,比如将我滚动QtCore.Qt.MatchRegExp
到QtCore.Qt.MatchContains
包含"cat"的单词。
from PyQt5 import QtCore,QtWidgets
app=QtWidgets.QApplication([])
def scroll():
#QtCore.QRegularExpression(r'\b'+'cat'+'\b')
item = listWidget.findItems('cat', QtCore.Qt.MatchContains)[0]
item.setSelected(True)
window = QtWidgets.QDialog()
window.setLayout(QtWidgets.QVBoxLayout())
listWidget = QtWidgets.QListWidget()
window.layout().addWidget(listWidget)
cats = ["thundercat","cat","tom cat","dogcat","dog and cat","super cat","lazycat"]
for i,cat in enumerate(cats):
QtWidgets.QListWidgetItem(f"{i} {cat}", listWidget)
btn = QtWidgets.QPushButton('Scroll')
btn.clicked.connect(scroll)
window.layout().addWidget(btn)
window.show()
app.exec_()
现在我已经阅读了这个Qt::MatchRegularExpression 并且我希望使用它来实现我的目标,即滚动到包含"cat"的EXACT WORD的字符串。根据这里所说的文档。
Qt::MatchRegularExpression
使用正则表达式作为搜索词执行基于字符串的匹配。使用 QRegularExpression。使用此标志时,可以将 QRegularExpression 对象作为参数传递,并将直接用于执行搜索。区分大小写标志将被忽略,因为 QRegularExpression 对象预计将被完全配置。这个枚举值是在 Qt 5.15 中添加的。
我似乎无法弄清楚我尝试了多种解决方案来解决可以通过QRegularExpression object can be passed as parameter and will directly be used to perform the search
的含义。object
我实验的东西
1.)我试过这个,但是它给了我一个IndexError: list index out of range
错误,表明它没有找到任何东西。我想知道为什么因为regex
看起来是正确的。
item = listWidget.findItems(r'\b'+'cat'+'\b',QtCore.Qt.MatchRegularExpression)[0]
2.)我试过这个仍然给我这种类型的错误。
File "finditems.py", line 7, in scroll
item = listWidget.findItems('cat',QtCore.Qt.MatchRegularExpression(QtCore.QRegularExpression(r'\b'+'cat'+'\b')))[0]
TypeError: 'MatchFlag' object is not callable
3.)我再次尝试了这个,但我认为我弄错了,因为findItems
函数的第一个参数需要是一个str
类型。
File "finditems.py", line 7, in scroll
item = listWidget.findItems(QtCore.QRegularExpression(r'\b'+'cat'+'\b'),QtCore.Qt.MatchRegularExpression)[0]
TypeError: findItems(self, str, Union[Qt.MatchFlags, Qt.MatchFlag]): argument 1 has unexpected type 'QRegularExpression'
我怎样才能正确地pass
按照QRegularExpression object
文档中的说明进行操作,以便我可以滚动到具有“cat”的EXACT WORD的字符串?