Я пытаюсь получить регулярное выражение, чтобы соответствовать тексту между фигурными скобкамиQRegEx, чтобы выделить все между скобками
The following SO question. Дай мне начало, но это не работает для меня. И я не уверен, что я делаю неправильно. Рассмотрим следующий пример:
The {quick} brown fox {jumped over the} lazy old {dog}. While {the [0ld] man} spoke {to the} gardener.
То, что я пытаюсь сделать, это матч весь текст между фигурными скобками, так что я могу выделить их. Выражение
\{(.*?)\}
не работал для меня. Я не знаю, почему. Я использую python 2.10/pyqt и класс QRegExp pyqt для Windows.
Может ли кто-нибудь указать, что я делаю неправильно.
Просто чтобы добавить более подробную информацию, на этот раз с кодом. рассмотрите следующее:
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
class MyHighlighter(QSyntaxHighlighter):
def __init__(self, parent, theme):
QSyntaxHighlighter.__init__(self, parent)
self.parent = parent
keyword = QTextCharFormat()
self.highlightingRules = []
# keyword
brush = QBrush(Qt.darkBlue, Qt.SolidPattern)
keyword.setForeground(brush)
keyword.setFontWeight(QFont.Bold)
keywords = QStringList([ "break", "else", "for", "if", "in",
"next", "repeat", "return", "switch",
"try", "while" ])
for word in keywords:
pattern = QRegExp("\\b" + word + "\\b")
rule = HighlightingRule(pattern, keyword)
self.highlightingRules.append(rule)
# braces
singlebraces = QTextCharFormat()
pattern = QRegExp("\{(.*?)\}")
pattern.setMinimal(False)
brush = QBrush(Qt.darkRed, Qt.SolidPattern)
singlebraces.setForeground(brush)
rule = HighlightingRule(pattern, singlebraces)
self.highlightingRules.append(rule)
def highlightBlock(self, text):
for rule in self.highlightingRules:
expression = QRegExp(rule.pattern)
index = expression.indexIn(text)
while index >= 0:
length = expression.matchedLength()
self.setFormat(index, length, rule.format)
index = text.indexOf(expression, index + length)
self.setCurrentBlockState(0)
class HighlightingRule():
def __init__(self, pattern, format):
self.pattern = pattern
self.format = format
class TestApp(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
font = QFont()
font.setFamily("Courier")
font.setFixedPitch(True)
font.setPointSize(10)
editor = QTextEdit()
editor.setFont(font)
highlighter = MyHighlighter(editor, "Classic")
self.setCentralWidget(editor)
self.setWindowTitle("Syntax Highlighter")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = TestApp()
window.show()
sys.exit(app.exec_())
Хорошо, когда я запускаю это и набираю что-нибудь между фигурными фигурными скобками, он не выделяется красным. Просто для хорошей меры я оставил ключевые слова, чтобы показать, что код делает подсветку синтаксиса.
Примечание: Я попробовал выражение \{(.*?)\}
на веб-сайте и да, это действительно сработало, но не понятно, почему выражение не работает в коде.
Хо, это не работает для вас? то, что сжимается с '>>> re.findall (r '\ {(. +?) \}', s) ['quick', 'перепрыгнул через', 'собаку', '[0ld] man', ' 'to'] ' – Kasramvd
Ваше регулярное выражение работает ... Вы можете проверить здесь https://regex101.com/r/kV5dR1/1 Если у вас все еще есть проблема, разместите свой код здесь. – Asunez