python中变量扩展所需的Regex

2024-04-24 14:01:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个变量,它的值是这样的

var = '${home_${path}}'

我想要一个递归检测${ any content }的正则表达式。也就是说,首先我应该匹配${home_${path}},然后匹配${path}。我需要用它的实际内容替换${..}来评估变量内容。你知道吗


Tags: path内容homevaranycontent
1条回答
网友
1楼 · 发布于 2024-04-24 14:01:20

我认为这里需要一个正则函数而不是正则表达式。问题是纯正则表达式不能匹配任意嵌套的递归模式。所以,他们没有太多的使用轨道匹配的开场白和收尾。你知道吗

相反,编写一个函数来传递输入字符串,跟踪后进先出堆栈中的开始符(只需附加到常规python列表中),然后在找到结束符时匹配结束符(弹出最近对应的开始符):

import re

braces = re.compile(r'(\${)|(})')

def substitute(s, **env):
    openers = []
    pos = 0
    while 1:
        mo = braces.search(s, pos)
        if mo is None:
            break
        opener, closer = mo.groups()
        if opener:
            openers.append(mo.start())
            pos = mo.end() + 1
            continue
        start = openers.pop()
        end = mo.end()
        body = s[start+2 : end-1]
        s = s[:start] + env[body] + s[end:]
    return s


print substitute('Return to ${home_${path}} for further ${action}',
                 home_world='earth',
                 home_state='kansas',
                 path='state',
                 action='orders')

相关问题 更多 >