gpt4 book ai didi

python - RegEx 根据模式或分隔符替换字符实例

转载 作者:太空宇宙 更新时间:2023-11-04 07:43:58 25 4
gpt4 key购买 nike

我最近才开始学习和利用正则表达式的强大功能我有一个从 os.walk() 返回的文件元组列表,如下所示:

files = ('s8_00.tif', 's9_00.tif', 's10_000.tif', 's11_00.tif')

我试图让它看起来像这样:

files = ('s8_##.tif', 's9_##.tif', 's10_###.tif', 's11_##.tif')

我试过用这个。

pad2 = re.compile(r'_00?')

for root, dirs, files in seqDirs:
pad = files[0]
p = pad2.sub("#", pad)
print p

返回:

p = ('s8#.tif', 's9#.tif', 's10#0.tif', 's11#.tif')

所以我把表达方式改成了:

pad2 = re.compile('(_)0+')

给我:

p = ('s8#.tif', 's9#.tif', 's10#.tif', 's11#.tif')

问题出在我的p = pad2.sub函数上吗?还是我编译的表达式中存在问题?还是表达式中的 “_” 搞砸了?

我什至尝试在 pad2.sub 函数中传递一些表达式来测试它,当然这并没有真正起作用。我知道我在这里遗漏了一些东西,而且我有点卡住了。

我们将不胜感激任何帮助以及对逻辑的解释。

最佳答案

我们将使用一个函数来替换,而不是一个字符串。

def replacer(data):
return re.sub(r'(?<=_)(0+)', lambda m: m.group(0).replace('0', '#'), data)

files = ('s8_000.tif', 's9_00.tif', 's10_000.tif', 's11_00.tif')
map(replacer, files)
print(files)

?<=是一个积极的回顾断言。您可以在 Regular Expression Syntax 的文档中找到解释。 .

0+捕获所有后续零

lambda 函数替换每个 0# .

关于python - RegEx 根据模式或分隔符替换字符实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12572518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com