【问题标题】:Python - Regex not replacing directory strings [duplicate]Python - 正则表达式不替换目录字符串[重复]
【发布时间】: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 上的这种格式。当我运行上述函数时,它没有错误地完成,但是目录名称没有改变。我哪里错了?

【问题讨论】:

    标签: python regex operating-system


    【解决方案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 指出的那样,我错误地使用了 $ 符号来完成模式。无论如何感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2018-08-08
    • 2023-04-09
    • 1970-01-01
    • 2022-11-07
    • 2012-10-08
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多