Python正则表达式模式替换

时间:2013-09-20 13:43:40

标签: python regex replace

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

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

这被证明是无用的所以现在转向re.sub但是我似乎无法找到一种模式,只有[]才能用[替换] }或pattern = r'[^\[]([\[])[^\]]' 周围没有括号。

我不知道这是否对任何人都有意义,但几乎就是这样,这是我到目前为止所搞乱的模式,它不喜欢我。

{{1}}

1 个答案:

答案 0 :(得分: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'