0

我试图从 python 脚本中获取任何动态输入,在这种情况下,它是一个简单的文件组织脚本。我需要确保[or]的任何实例都像这样包装[[] []]

所以很自然地我尝试了替换,但只是在所有转义括号周围加上括号(用于使用的转义括号glob.glob

这被证明是无用的,所以现在我转向re.sub但我似乎无法找到一种模式,如果or周围没有括号,它只会替换[]与其转义对应物。[]

我不知道这对任何人是否有意义,但仅此而已,这是到目前为止我得到的混乱的 re 模式,它不喜欢我。

pattern = r'[^\[]([\[])[^\]]'
4

1 回答 1

3

我会选择使用 的高阶功能re.sub来处理标记的解决方案(标记化是解析计算机语言的常见做法):

def replaceToken(match):
    token = match.group()
    if len(token) == 3:
        return token
    else:
        return '[' + token + ']'

re.sub(r'(\[\[\])|(\[\]\])|\[|\]', replaceToken, 'foo[[bar]bloh')

或者在一个电话中,如果您愿意:

re.sub(r'(\[\[\])|(\[\]\])|\[|\]',
       lambda x: x.group() if len(x.group()) == 3
                           else '[' + x.group() + ']', 'foo[[]bar]bloh')

结果:

'foo[[bar]bloh' → 'foo[[][[]bar[]]bloh'
'foo[[]bar]bloh' → 'foo[[]bar[]]bloh'
于 2013-09-20T14:18:54.967 回答