【问题标题】:Python regex to remove specific pattern from a list of strings [closed]Python正则表达式从字符串列表中删除特定模式[关闭]
【发布时间】:2016-09-20 09:28:45
【问题描述】:

我有一个带有文件名的字符串列表。文件名遵循特定的命名格式:

string1_YYYYMMDD_HHMMSS_string2

这里 YYYYMMDD 和 HHMMSS 是实际的日期和时间值。

我想删除每个条目的“string1”之后出现的所有字符。我一直在用正则表达式尝试这个,但没有白费。谁能帮我解决这个问题?

【问题讨论】:

    标签: python regex python-2.7


    【解决方案1】:

    您不需要正则表达式,只需在第一个下划线处拆分:

    s = 'string1_YYYYMMDD_HHMMSS_string2'
    return s.split('_')[0]
    

    [编辑]:

    如果您只能依赖最后部分 ('_YYYYMMDD_HHMMSS_string2'),请尝试像这样进行索引:

    s = 's_t_r_i_n_g_1_YYYYMMDD_HHMMSS_string2'
    return '_'.join(s.split('_')[:-3])
    

    【讨论】:

    • 又短又甜!!!
    • 我可以这样做,但“string1”也可能包含下划线。在每个字符串的末尾总是重复的唯一模式是 _YYYYMMDD_HHMMSS_string2
    • 谢谢@HumanCatfood!
    • 我不必按照这个解决方案使用正则表达式
    • 我的荣幸! :)
    【解决方案2】:

    使用正则表达式:

    import re
    s = 'string1_YYYYMMDD_HHMMSS_string2'
    newstr = re.sub('_.*', '', s)
    print(newstr)
    

    注意事项:

    • _.*_ 及其所有以下字符匹配。
    • re.sub(p, r, s)s 中搜索 p 并将所有匹配项替换为 r

    更新 #1

    string1 可能包含额外的下划线。我想保留所有 string1 并且只摆脱尾随模式。

    在这种情况下,您可以使用以下正则表达式:

    _\d{8}_\d{6}_.*
    

    演示:https://regex101.com/r/jS2gL5/1

    【讨论】:

    • string1 可能包含额外的下划线。我想保留所有 string1 并且只去掉尾随模式。
    • @SudeepMohanty 查看更新!
    • 您的最新更新也能胜任!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2015-06-24
    • 2021-08-30
    • 2022-11-19
    相关资源
    最近更新 更多