我需要一个Python脚本(正则表达式)来转换以下字符串:
pattern1?(pattern2?pattern3:pattern4):(pattern5?pattern6:pattern7)
或
pattern1?pattern2:(pattern5?pattern6:pattern7)
到
(pattern3 if pattern2 else pattern4) if pattern1 else (pattern6 if pattern5 else pattern7)
这是一个示例,因为它可以递归:
input = (x< 0.02e-6)?((y<0.07)?9:7):4
out = (9 if (y<0.07) else 7) if (x< 0.02e-6) else 4
regex
库来执行此操作,因为它支持子例程和递归,因此您可以匹配平衡/嵌套模式。
pip install regex
使用
regex
,您可以将 (pattern1)?pattern2:pattern3
等平衡/嵌套模式与以下表达式匹配:
((?:[^?:()\n]|\((?1)\))+)\?((?1)):((?1))
这是Python代码:
import regex
text = '(x< 0.02e-6)?((y<0.07)?9:7):4'
pattern = r'((?:[^?:()\n]|\((?1)\))+)\?((?1)):((?1))'
while regex.search(pattern, text):
text = regex.sub(pattern, r'\2 if \1 else \3', text)
print(text)
查看现场测试这里