小能豆

使用 python 正则表达式将 string1 中单词之间的空格替换为下划线,并在 string1 末尾添加 string2

py

我想使用 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


阅读 49

收藏
2025-03-14

共1个答案

小能豆

你可以将两个正则替换操作合并为一个,如下所示:

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)

解释:

  1. re.sub(r' ', '_', string1) + "_aaa.pdf"
  2. 先用 re.sub(r' ', '_', string1) 将空格替换为 _
  3. 然后手动拼接 "_aaa.pdf"

  4. re.sub(r'(.+)', lambda m: re.sub(r' ', '_', m.group(1)) + '_aaa.pdf', string1)

  5. (.+) 匹配整个字符串。
  6. 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

这种方式更加灵活,也适用于更复杂的场景。

2025-03-14