Я пытаюсь написать подсветку синтаксиса в стиле Prettify для Qiskit Terra (которая близко соответствует синтаксису Python). Очевидно, Prettify использует регулярное выражение Javascript. Например, /^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/, null, '"'
- это регулярное выражение, соответствующее действительным строкам в Q # . В основном я пытаюсь собрать эквивалентное выражение регулярного выражения для Python.
Теперь я знаю, что Python поддерживает строки в тройных кавычках, т.е. '''<string>'''
и """<string>"""
являются допустимыми строками (этот формат особенно используется для строк документации ). Чтобы разобраться с этим делом, я написал соответствующую группу захвата как:
(^\'{3}(?:[^\\]|\\[\s\S])*(?:\'{3}$))
Вот ссылка regex101 .
Это работает нормально за исключением некоторых случаев, таких как:
''' 'This "is" my' && "first 'regex' sentence." ''' &&
''' 'This "is" the second.' '''
Ясно, что здесь следует рассматривать ''' 'This "is" my' && "first 'regex' sentence." '''
как одну строку и ''' 'This "is" the second.' '''
как другую. Но нет, регулярное выражение, которое я написал, объединяет все это в одну строку (проверьте ссылку regex101 ). Таким образом, он не завершает строку, даже когда встречает '''
(соответствует '''
в начале).
Как мне изменить регулярное выражение (^\'{3}(?:[^\\]|\\[\s\S])*(?:\'{3}$))
, чтобы учесть этот случай? Я знаю об этом: Как сопоставить «что-нибудь до этой последовательности символов» в регулярном выражении? , но это не совсем отвечает на мой вопрос, по крайней мере, не напрямую.