[英]Javascript flavor regex for identifying valid Python strings enclosed within triple quotes
我正在尝试为Qiskit Terra (它紧跟 Python 语法)编写一个Prettify风格的语法高亮器。 显然,Prettify 使用 Javascript 风格的正则表达式。 例如, /^\\"(?:[^\\"\\\\]|\\\\[\\s\\S])*(?:\\"|$)/, null, '"'
是对应于有效字符串的正则表达式在Q# 中。 基本上,我正在尝试为 Python 组合等效的正则表达式。
现在,我知道 Python 支持三引号内的字符串,即'''<string>'''
和"""<string>"""
是有效的字符串(这种格式特别用于docstrings )。 为了处理这种情况,我将相应的捕获组写为:
(^\'{3}(?:[^\\]|\\[\s\S])*(?:\'{3}$))
这是regex101 链接。
这工作正常,但在某些情况下,例如:
''' 'This "is" my' && "first 'regex' sentence." ''' &&
''' 'This "is" the second.' '''
显然,这里应该考虑''' 'This "is" my' && "first 'regex' sentence." '''
''' 'This "is" my' && "first 'regex' sentence." '''
作为一个字符串, ''' 'This "is" the second.' '''
''' 'This "is" the second.' '''
作为另一个。 但是不,我编写的正则表达式将整个内容组合为一个字符串(检查regex101 链接)。 也就是说,即使遇到'''
(对应于开头的'''
),它也不会结束字符串。
我应该如何修改正则表达式(^\\'{3}(?:[^\\\\]|\\\\[\\s\\S])*(?:\\'{3}$))
以考虑这种情况? 我知道这一点: 如何在正则表达式中匹配“直到此字符序列之前的任何内容”? 但这并不能完全回答我的问题,至少不能直接回答。
我不知道你还想用它做什么,但下面的正则表达式可以用 MULTILINE 标志给出的例子做你想要的。
My_search = re.findall("(?:^\'{3})(.*)(?:\'{3})", My_string, re.MULTILINE)
print(My_search[0])
print(My_search[1])
输出是,
'This "is" my' && "first 'regex' sentence."
'This "is" the second.'
你也可以在这里看到它的工作https://regex101.com/r/k4adk2/11
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.