我正在尝试从python脚本获取任何动态输入,在这种情况下它是一个简单的文件组织脚本。我需要确保[
或]
的任何实例都包含[[] []]
。
所以很自然地我尝试替换,但只是在所有的转义括号(使用glob.glob
的转义括号)周围放置括号
这被证明是无用的所以现在转向re.sub
但是我似乎无法找到一种模式,只有[
或]
才能用[
替换]
}或pattern = r'[^\[]([\[])[^\]]'
周围没有括号。
我不知道这是否对任何人都有意义,但几乎就是这样,这是我到目前为止所搞乱的模式,它不喜欢我。
{{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'