python三引号解析_如何用正则表达式解析三引号字符串?

我正在为一种小型语言编写一个解析器,它提供与Python相同的“三重引号”字符串。该语言非常简单,可以由有限状态机高效地解析,其中转换由一组正则表达式触发。在

一个强大的约束是解析器必须逐行工作,因此解析三重引号的多行字符串时,FSM至少需要两个状态(一个在“输入”三引号字符串时,一个在“离开”它时)。在

我认为一个简单的解决方案是为每行定义三个regex组:一个用于开始"""模式,一个用于字符串字符,一个用于结束"""模式。因此,通过测试这3组的空性,很容易触发正确的转换

不幸的是,我找不到一个正确的正则表达式来处理所有的情况。以下是我的实验结果:text = '"""\nabc\n"abc"\n"""abc"""\nabc"""\n"""a"b"c\n"""a"b"c"""'

regex1 = r'\s*("""|")?(.*)("""|")?\s*'

regex2 = r'\s*("""|")?(.*?)("""|")?\s*'

for line in text.split('\n'):

match = re.match(regex1, line)

print(line, '-->', match.groups() if match else False)

以及运行此代码时的结果:

^{pr2}$

中间组(.*)太贪心,吃了最后一个定界符。另一方面,当使用lazy表单时(请参见regex2),它并不匹配所有的字符串。在""" --> ('"""', '', None)

abc --> (None, '', None)

"abc" --> ('"', '', None)

"""abc""" --> ('"""', '', None)

abc""" --> (None, '', None)

"""a"b"c --> ('"""', '', None)

"""a"b"c""" --> ('"""', '', None)

所以我想我需要一个介于两者之间的东西。任何想法都会受到热烈欢迎。。。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值