Каким будет шаблон 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.
Я не эксперт в регулярном выражении, но используя 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_())