Python - 正则表达式不替换目录字符串[重复]
Posted
技术标签:
【中文标题】Python - 正则表达式不替换目录字符串[重复]【英文标题】:Python - Regex not replacing directory strings [duplicate] 【发布时间】:2019-02-19 11:23:27 【问题描述】:我正在使用以下函数从目录中的文件中删除特定的字符串模式:
import os
for filename in os.listdir(path):
os.rename(filename, filename.replace(r'^[A-Z]\d\d\s-\s[A-Z]\d\d\s-\s$', ''))
模式如下,其中A为任意大写字母,#为0-9之间的任意数字:
A## - A## -
我的正则表达式匹配 regex101 上的这种格式。当我运行上述函数时,它没有错误地完成,但是目录名称没有改变。我哪里错了?
【问题讨论】:
【参考方案1】:replace
字符串方法不支持正则表达式。
您需要导入re
module 并使用其sub 方法。
所以您的代码可能如下所示:
import os
import re
for filename in os.listdir(path):
os.rename(filename, re.sub(r'^[A-Z]\d\d\s-\s[A-Z]\d\d\s-\s', '', filename))
但不要忘记标志等。
编辑:从模式中删除了$
,因为文件名不会在那里结束。
【讨论】:
奇怪,我试过了,但由于某种原因它仍然无法正常工作,它完成没有错误但没有任何改变。 @LaurieBamber 你能给我们几个示例文件名吗? 文件 1:'S01 - E01 - 这里的东西',文件 2:'S01 - E02 - 不同的东西'....文件 k:'S07 - E06 - 不同的东西' @LaurieBamber 您的模式中有字符串结束标记 ($
),但文件名没有在那里结束,因此不匹配。只需从您的模式中删除 $
。
@LaurieBamber 乐于助人。不要忘记将问题标记为已解决(答案为已接受)。 =)【参考方案2】:
import re
filename='A11 - A22 - '#A## - A## -
re.sub(filename,r'^[A-Z]\d\d\s-\s[A-Z]\d\d\s-\s', '')
【讨论】:
谢谢,但由于某种原因,我的代码仍然无法正常工作。 执行完上面的代码可以打印输出吗? 我的错误,正如 Chillie 指出的那样,我错误地使用了 $ 符号来完成模式。无论如何感谢您的帮助。以上是关于Python - 正则表达式不替换目录字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章
正则表达式 Python - 用单个空格替换换行符、制表符、空格的任意组合[重复]
Python爬虫编程思想(35):用正则表达式搜索替换和分隔字符串