繁体   English   中英

用于识别包含在三引号内的有效 Python 字符串的 Javascript 风味正则表达式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM