Nano Hash - криптовалюты, майнинг, программирование

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

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

Тестовый шаблон

string1 = 'тест' и string2 = 'ajsijd'

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

QRegExp("\'.*\'")

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

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

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


  • Это конкретная проблема/вопрос QRegExp? Не могли бы вы попросить общую помощь RegExp? Может быть более плодотворным! 11.10.2018
  • Итак, на самом деле это регулярное выражение поможет, поэтому я выделяю строки только одинарными кавычками, но я не могу заставить его работать с QRegExp: (['])(?:(?=(\\?))\2 .)*?\1 11.10.2018
  • @Алексей Кириусвенкович попробуй: '[^'\\]*(\\.[^'\\]*)*' 11.10.2018
  • Хорошо, это регулярное выражение хорошо, а также это хорошо и короче: (')[^\1]*?\1 но когда я использую его с QRegExp, оно не работает: QRegExp((')[^\1] *?\1) 11.10.2018

Ответы:


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_()) 

введите здесь описание изображения

11.10.2018
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..