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 - 用单个空格替换换行符、制表符、空格的任意组合[重复]

Python爬虫编程思想(35):用正则表达式搜索替换和分隔字符串

我不能使用正则表达式替换包含“\”字符的文本[重复]

Java +如何将包含'('的字符串替换为'\\('以用于pattern.compile正则表达式[重复]

Python 正则表达式转义运算符 \ 在替换和原始字符串中