gpt4 book ai didi

python - Python 3.3 中的 re.sub

转载 作者:太空宇宙 更新时间:2023-11-03 12:40:40 27 4
gpt4 key购买 nike

我正在尝试将文本字符串从 file1 的形式更改为 file01。我真的是 python 的新手,在尝试使用模式时无法弄清楚“repl”位置应该放什么。谁能帮帮我?

text = 'file1 file2 file3'

x = re.sub(r'file[1-9]',r'file\0\w',text) #I'm not sure what should go in repl.

最佳答案

你可以试试这个:

>>> import re    
>>> text = 'file1 file2 file3'
>>> x = re.sub(r'file([1-9])',r'file0\1',text)
'file01 file02 file03'

[1-9] 周围的方括号捕获匹配项,这是第一个匹配项。您会看到我在替换中使用了它,使用 \1 表示匹配中的第一个捕获。

此外,如果您不想为具有 2 位或更多数字的文件添加零,您可以在正则表达式中添加 [^\d]:

x = re.sub(r'file([1-9](\s|$))',r'file0\1',text)

现在我正在使用 str.format() 重新审视这个答案,这是一个更通用的解决方案和一个 lambda表达式:

import re
fmt = '{:03d}' # Let's say we want 3 digits with leading zeroes
s = 'file1 file2 file3 text40'
result = re.sub(r"([A-Za-z_]+)([0-9]+)", \
lambda x: x.group(1) + fmt.format(int(x.group(2))), \
s)
print(result)
# 'file001 file002 file003 text040'

关于 lambda 表达式的一些细节:

lambda x: x.group(1) + fmt.format(int(x.group(2)))
# ^--------^ ^-^ ^-------------^
# filename format file number ([0-9]+) converted to int
# ([A-Za-z_]+) so format() can work with our format

我正在使用表达式 [A-Za-z_]+ 假设文件名除训练数字外仅包含字母和下划线。如果需要,请选择更合适的表达方式。

关于python - Python 3.3 中的 re.sub,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16707090/

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