[PyQt] Problem with regex in my code

Maziar Parsijani maziar.parsijani at gmail.com
Sun Sep 2 09:12:35 BST 2018


Hi Maurizio and David
You both are correct ,but if you attract on the code :When you copy the
last character in "قَالَ " we call it fatha " ــَ " and put it completely
in the lineedit.text() then it will find it correctly without (r'\b{}\b').
The problem here is with that last one character which is sometimes
different for example if I change the string to this :

m = "قَالَتْ قَالَ فَقَالُوا۟ قَالُوا۟ قَالَ قَالُوٓا۟ قَالَتَا ٱلْقَالِينَ
قَال  قَالِ "
then we can not use (r'\b{}\b').
Dear Maurizio I will take your advice But the problem here maybe related to
PYQT.QTGUI.Qtextcursor and Qtextedit.textcursor
if  you say that it is not related then I will not ask anything else .and
as you know the Arabic  help texts in python are not so helpful.
Thanks anyway but let me know about that I don't try to post other problems
like this.



On Sun, Sep 2, 2018 at 12:33 AM Maurizio Berti <maurizio.berti at gmail.com>
wrote:

> 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/20180902/847d92e8/attachment-0001.html>


More information about the PyQt mailing list