Python .replace() 函数可以替换整个短语吗?
Can the Python .replace() function replace whole phrases?
我是一名视频编辑,试图将人才脚本的 word 文档自动转换为字幕的 STR 文件,以加快流程。由于每个视频的结构都相同,因此这个想法很有效。在脚本中,我试图通过使用 .replace() 函数从使用 Python 和 python-docx 库创建的 STR 文件中删除一些编辑说明,但是这似乎没有用。这些都以“(CUT”开头,以下可能的句子各不相同。程序正确地选择了这些句子出现的位置,但替换函数不会产生任何结果变化。我在这里做错了什么?
for x in range(2,len(doc.paragraphs)):
newPara = doc.paragraphs[x].text
if (newPara.find('(CUT') != -1):
newPara.replace('(CUT', '')
if (newPara.find('COMPLETE)') != -1):
newPara.replace(' AWAY COMPLETE)', '')
elif (newPara.find('TITLE)') != -1):
newPara.replace(' AWAY TO TITLE)', '')
elif (newPara.find('SIDE)') != -1):
newPara.replace(' BACK TO SIDE)', '')
str.replace() 不会改变原始字符串 - 它 returns 是变异的字符串。
你应该重新分配给你的变量:
#...
if (newPara.find('(CUT') != -1):
newPara = newPara.replace('(CUT', '')
if (newPara.find('COMPLETE)') != -1):
newPara = newPara.replace(' AWAY COMPLETE)', '')
elif (newPara.find('TITLE)') != -1):
newPara = newPara.replace(' AWAY TO TITLE)', '')
elif (newPara.find('SIDE)') != -1):
newPara = newPara.replace(' BACK TO SIDE)', '')
正如上面那个人所说,字符串是不可变的,str.replace()
函数 returns 一个新字符串。
但添加到您的代码中。
您不需要所有这些条件,如果 str.replace()
没有找到您正在寻找的子字符串 returns 相同的字符串。
示例:
newPara = '(CUT AWAY COMPLETE) AWAY TO TITLE) BACK TO SIDE)Empty String'
if (newPara.find('(CUT') != -1):
newPara = newPara.replace('(CUT', '')
newPara = newPara.replace(' AWAY COMPLETE)', '')
newPara = newPara.replace(' AWAY TO TITLE)', '')
newPara = newPara.replace(' BACK TO SIDE)', '')
print(newPara)
打印:'Empty String'
还有:
if (newPara.find('(CUT') != -1):
for substring in ['(CUT',' AWAY COMPLETE)',' AWAY TO TITLE)', ' BACK TO SIDE)']:
newPara = newPara.replace(substring, '')
我是一名视频编辑,试图将人才脚本的 word 文档自动转换为字幕的 STR 文件,以加快流程。由于每个视频的结构都相同,因此这个想法很有效。在脚本中,我试图通过使用 .replace() 函数从使用 Python 和 python-docx 库创建的 STR 文件中删除一些编辑说明,但是这似乎没有用。这些都以“(CUT”开头,以下可能的句子各不相同。程序正确地选择了这些句子出现的位置,但替换函数不会产生任何结果变化。我在这里做错了什么?
for x in range(2,len(doc.paragraphs)):
newPara = doc.paragraphs[x].text
if (newPara.find('(CUT') != -1):
newPara.replace('(CUT', '')
if (newPara.find('COMPLETE)') != -1):
newPara.replace(' AWAY COMPLETE)', '')
elif (newPara.find('TITLE)') != -1):
newPara.replace(' AWAY TO TITLE)', '')
elif (newPara.find('SIDE)') != -1):
newPara.replace(' BACK TO SIDE)', '')
str.replace() 不会改变原始字符串 - 它 returns 是变异的字符串。 你应该重新分配给你的变量:
#...
if (newPara.find('(CUT') != -1):
newPara = newPara.replace('(CUT', '')
if (newPara.find('COMPLETE)') != -1):
newPara = newPara.replace(' AWAY COMPLETE)', '')
elif (newPara.find('TITLE)') != -1):
newPara = newPara.replace(' AWAY TO TITLE)', '')
elif (newPara.find('SIDE)') != -1):
newPara = newPara.replace(' BACK TO SIDE)', '')
正如上面那个人所说,字符串是不可变的,str.replace()
函数 returns 一个新字符串。
但添加到您的代码中。
您不需要所有这些条件,如果 str.replace()
没有找到您正在寻找的子字符串 returns 相同的字符串。
示例:
newPara = '(CUT AWAY COMPLETE) AWAY TO TITLE) BACK TO SIDE)Empty String'
if (newPara.find('(CUT') != -1):
newPara = newPara.replace('(CUT', '')
newPara = newPara.replace(' AWAY COMPLETE)', '')
newPara = newPara.replace(' AWAY TO TITLE)', '')
newPara = newPara.replace(' BACK TO SIDE)', '')
print(newPara)
打印:'Empty String'
还有:
if (newPara.find('(CUT') != -1):
for substring in ['(CUT',' AWAY COMPLETE)',' AWAY TO TITLE)', ' BACK TO SIDE)']:
newPara = newPara.replace(substring, '')