我想使用 Python 正则表达式替换操作来更改预期文件名,例如
“在 PyQt5 DialogButtonBox 中使用 3 个按钮”
“在 PyQt5 对话框按钮框中使用 3 个按钮.pdf”
如果我只想用“_”替换空格,则替换操作很简单,可以用以下几行来解决:
string1 = "Using 3 Buttons in PyQt5 DialogButtonBox"
string1_revised = re.sub('[ ]', '_', string1)
如果我只想将“_aaa.pdf”添加到 string1 的末尾,则操作再次变得简单:
result2 = re.sub('(?P<wholeThing>.+)', '\g<wholeThing>_aaa.pdf', string1)
但我希望替换操作将空格替换为下划线,并将’_aaa.pdf’添加到string1_revised的末尾。
我认为以下表达式与 string1 匹配,并将组名“wholeThing”分配给 string1:(?P<wholeThing>(([A-Za-z0-9]+)([ ]))(x)?)
但我不知道如何编写替换代码。任何见解都将不胜感激。谢谢。Marc
你可以将两个正则替换操作合并为一个,如下所示:
import re
string1 = "Using 3 Buttons in PyQt5 DialogButtonBox"
result = re.sub(r' ', '_', string1) + "_aaa.pdf"
print(result)
或者,你可以使用单个 re.sub()
调用完成所有更改:
import re
string1 = "Using 3 Buttons in PyQt5 DialogButtonBox"
result = re.sub(r'(.+)', lambda m: re.sub(r' ', '_', m.group(1)) + '_aaa.pdf', string1)
print(result)
re.sub(r' ', '_', string1) + "_aaa.pdf"
re.sub(r' ', '_', string1)
将空格替换为 _
。 然后手动拼接 "_aaa.pdf"
。
re.sub(r'(.+)', lambda m: re.sub(r' ', '_', m.group(1)) + '_aaa.pdf', string1)
(.+)
匹配整个字符串。 lambda m: re.sub(r' ', '_', m.group(1)) + '_aaa.pdf'
: m.group(1)
提取整个字符串。 re.sub(r' ', '_', m.group(1))
进行空格替换。 '_aaa.pdf'
。 最终输出:
Using_3_Buttons_in_PyQt5_DialogButtonBox_aaa.pdf
这种方式更加灵活,也适用于更复杂的场景。