[PyQt] Problem with regex in my code

Maurizio Berti maurizio.berti at gmail.com
Sat Sep 1 21:03:01 BST 2018


Simple regexes like that one will match all sequences of characters found;
if you want to find those character as a single "word", you will need to
use word boundaries.

Change the pattern init to this and it works (at least, according to the
string you gave):

pattern = QtCore.QRegExp(r'\b{}\b'.format(self.lineEdit.text()))

Have a look at this, too: https://stackoverflow.
com/questions/40731058/regex-match-arabic-keyword

As a side note, forgive my bluntness, but you might want to read some more
documentation about regex and right-to-left languages practices.
The latest questions you asked were not python nor qt related at all, and,
as you might understand, most of the people on this mailing list don't even
know how arabic language works; a bit of context might be useful, so that
even people not experienced with those language might help too.

Also, try to simplify examples by limiting code to what is really related
to your issue: those geometry, font and widget settings won't help anyone
reading your code. The same example could have been written in less than
half lines, and would have been much more readable: easier to read is
easier to understand and easier to help.
Finally, avoid mixing the way you import modules. You should import from
the main module _OR_ from the submodules. While it doesn't change much in
terms of computation, it decreases the possibility of bugs and improves
readibility, which is better for everybody reading your code, including you
:-)

Maurizio



2018-09-01 20:33 GMT+02:00 Maziar Parsijani <maziar.parsijani at gmail.com>:

> I want to select 2 "قَالَ" in m = "قَالَتْ قَالَ فَقَالُوا۟ قَالُوا۟
> قَالَ قَالُوٓا۟ قَالَتَا ٱلْقَالِينَ  " but with the below code it
> selects all words which contains " "قَالَ"
> Now what is the problem here?
> I have to put spaces before and after pattern1 for such thing but it
> doesn't work for me.
>
> pattern1 = " {0} ".format(self.lineEdit.text())
>
>
> from PyQt5 import QtCore, QtGui, QtWidgets
> from PyQt5.QtWidgets import QApplication, QTextEdit
> from PyQt5.QtGui import QTextDocument, QTextDocumentFragment
> from PyQt5 import QtCore, QtGui, QtWidgets
> import sys
> from PyQt5.QtWidgets import QDialog, QApplication
> class AppWindow(QDialog):
>     def __init__(self):
>         super().__init__()
>         self.setObjectName("Dialog")
>         self.resize(800, 600)
>         self.lineEdit = QtWidgets.QLineEdit(self)
>         self.lineEdit.setGeometry(QtCore.QRect(70, 70, 211, 21))
>         self.lineEdit.setObjectName("lineEdit")
>         self.pushButton = QtWidgets.QPushButton(self)
>         self.pushButton.setGeometry(QtCore.QRect(130, 110, 83, 28))
>         self.pushButton.setObjectName("pushButton")
>         self.SearchResults = QtWidgets.QTextEdit(self)
>         self.SearchResults.setGeometry(QtCore.QRect(130, 140, 500, 400))
>         font = QtGui.QFont()
>         font.setFamily("Amiri")
>         font.setPointSize(12)
>         self.SearchResults.setFont(font)
>         self.SearchResults.setToolTipDuration(0)
>         self.SearchResults.setReadOnly(True)
>         self.SearchResults.setAutoFormatting(QtWidgets.QTextEdit.AutoAll)
>         self.SearchResults.setObjectName("SearchResults")
>
>         self.retranslateUi(self)
>         QtCore.QMetaObject.connectSlotsByName(self)
>     def find1(self):
>             m = "  قَالَتْ  قَالَ فَقَالُوا۟ قَالُوا۟ قَالَ  قَالُوٓا۟ قَالَتَا  ٱلْقَالِينَ    "
>             self.SearchResults.append('{0} '.format(m))
>
>
>             cursor = self.SearchResults.textCursor()
>             format = QtGui.QTextCharFormat()
>             format.setForeground(QtGui.QBrush(QtGui.QColor("red")))
>
>             pattern1 = "{0}".format(self.lineEdit.text())
>             regex = QtCore.QRegExp(pattern1)
>             pos = 0
>             index = regex.indexIn(self.SearchResults.toPlainText(), pos)
>             tedad = 0
>             while (index != -1):
>                 cursor.setPosition(index)
>                 cursor.movePosition(QtGui.QTextCursor.WordLeft, QtGui.QTextCursor.KeepAnchor)
>                 cursor.mergeCharFormat(format)
>                 pos = index + regex.matchedLength()
>                 index = regex.indexIn(self.SearchResults.toPlainText(), pos)
>                 if regex.isValid():
>                     tedad += 1
>             nmayesh = ("{}".format(tedad))
>             self.SearchResults.append("{}".format(tedad))
>
>     def retranslateUi(self, Dialog):
>         _translate = QtCore.QCoreApplication.translate
>         self.setWindowTitle(_translate("Dialog", "Dialog"))
>         self.pushButton.setText(_translate("Dialog", "PushButton"))
>         self.pushButton.clicked.connect(self.find1)
>
> app = QApplication(sys.argv)
> w = AppWindow()
> w.show()
> sys.exit(app.exec_())
>
>
> _______________________________________________
> PyQt mailing list    PyQt at riverbankcomputing.com
> https://www.riverbankcomputing.com/mailman/listinfo/pyqt
>



-- 
È difficile avere una convinzione precisa quando si parla delle ragioni del
cuore. - "Sostiene Pereira", Antonio Tabucchi
http://www.jidesk.net
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20180901/c4a98042/attachment-0001.html>


More information about the PyQt mailing list