【问题标题】:QRegExp and single-quoted text for QSyntaxHighlighterQSyntaxHighlighter 的 QRegExp 和单引号文本
【发布时间】:2019-03-16 20:51:03
【问题描述】:

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。

【问题讨论】:

  • 它是 QRegExp 特定的问题/问题吗?您能否请求一般的 RegExp 帮助?可能会更有成果!
  • 好的,所以实际上这个正则表达式可以解决问题,所以我只用单引号突出显示字符串,但我不能让它在 QRegExp 上工作: (['])(?:(?= (\\?))\2.)*?\1
  • @Aleksei Kiriusvenkovich 试试看:'[^'\\]*(\\.[^'\\]*)*'
  • 好吧,正则表达式很好,这个也很好,而且它更短:(')[^\1]*?\1 但是当我将它与 QRegExp 一起使用时它不起作用:QRegExp( "(')[^\1]*?\1")

标签: python python-3.x pyqt pyqt5 qregexp


【解决方案1】:

我不是正则表达式专家,但使用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_()) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 2014-01-18
    • 2021-12-16
    • 2019-12-17
    • 1970-01-01
    • 2017-09-14
    相关资源
    最近更新 更多