QRegExp и текст в одинарных кавычках для QSyntaxHighlighter

1

Каким будет шаблон QRegExp для записи одиночного кавычек для QSyntaxHighlighter? Матчи должны включать кавычки, потому что я строю редактор кода sql.

Тестовый образец

string1 = 'test' и string2 = 'ajsijd'

До сих пор я пробовал:

QRegExp("\'.*\'")

Я работал над этим тестером регулярных выражений: https://regex101.com/r/eq7G1v/2, но когда я пытаюсь использовать это регулярное выражение в python, он не работает, вероятно, потому что мне нужно избежать символа?

self.highlightingRules.append((QRegExp("(['])(?:(?=(\\?))\2.)*?\1"), quotationFormat))

Я использую Python 3.6 и PyQt5.

  • 0
    Это специфическая проблема или вопрос QRegExp? Не могли бы вы попросить общую помощь RegExp? Может быть более плодотворным!
  • 0
    Итак, на самом деле это регулярное выражение выполнит свою задачу, поэтому я выделяю строки только одинарными кавычками, но я не могу заставить его работать с QRegExp: ([']) (?: (? = (\\?)) \ 2 .) *? \ 1
Показать ещё 2 комментария
Теги:
python-3.x
pyqt5
pyqt
qregexp

1 ответ

0
Лучший ответ

Я не эксперт в регулярном выражении, но используя C++ answer чтобы обнаруживать тексты между двойными кавычками, меняя его на одну цитату, я вижу, что он работает:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets

class SyntaxHighlighter(QtGui.QSyntaxHighlighter):
    def __init__(self, parent=None):
        super(SyntaxHighlighter, self).__init__(parent)

        keywordFormat = QtGui.QTextCharFormat()
        keywordFormat.setForeground(QtCore.Qt.darkBlue)
        keywordFormat.setFontWeight(QtGui.QFont.Bold)

        keywordPatterns = ["'([^'']*)'"]

        self.highlightingRules = [(QtCore.QRegExp(pattern), keywordFormat)
                for pattern in keywordPatterns]

    def highlightBlock(self, text):
        for pattern, _format in self.highlightingRules:
            expression = QtCore.QRegExp(pattern)
            index = expression.indexIn(text)
            while index >= 0:
                length = expression.matchedLength()
                self.setFormat(index, length, _format)
                index = expression.indexIn(text, index + length)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    editor = QtWidgets.QTextEdit()
    editor.append("string1 = 'test' and string2 = 'ajsijd'")
    highlighter = SyntaxHighlighter(editor.document())
    editor.show()
    sys.exit(app.exec_()) 

Изображение 174551

  • 0
    Спасибо вам большое! Оно работает!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню