从字符串的两端删除子字符串

2024-06-06 22:35:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件名,其中包含一些我想去掉的多余单词,比如:VISTHE等等

我是这个正则表达式,但问题是要删除的单词可能出现在文件名的前面或后面。为了更清楚,一些文件名示例如下:

filenames = ['a_VIS-MarnehNew_24RGB_1110.jpg',
             'Marne_04_Vis.jpg',
             'VIS_jeep_smoke.jpg',
             'IR_fk_ref_01_005.jpg',
             'c_LWIR-MarnehNew_24RGB_1110.jpg',
             'LWIR-MarnehNew_15RGB_603.jpg',
             'Movie_01_IR.jpg',
             'THE_fk_ge_03_005.jpg']

冗余字是VISVisIRLWIRTHE和前面的每个字符(如果出现在前面),或者后面的每个字符(如果出现在后面)。你知道吗

正确的例子是:

filenames = ['MarnehNew_24RGB_1110',
             'Marne_04',
             'jeep_smoke',
             'fk_ref_01_005',
             'MarnehNew_24RGB_1110',
             'MarnehNew_15RGB_603',
             'Movie_01',
             'fk_ge_03_005']

我尝试了这个代码,但是(显然对于后面的案例来说它是不够的:

import re
pattern = re.compile('(?:VIS|Vis|IR|LWIR)(?:-|_)(\w+)')

for i, filename in enumerate(filenames):
    matches = re.search(pattern, filename)
    if matches:
        print(i, matches.group(1))

0 MarnehNew_24RGB_1110
2 jeep_smoke
3 fk_ref_01_005
4 MarnehNew_24RGB_1110
5 MarnehNew_15RGB_603

那么,我怎样才能摆脱背诵呢?你知道吗


Tags: thererefir文件名vissmokejpg
1条回答
网友
1楼 · 发布于 2024-06-06 22:35:05

用你的例子

(?:^(?:\w_)?(?:VIS|Vis|IR|LWIR|THE)[-_]?)
|
(?:_?(?:VIS|Vis|IR|LWIR))?\.jpg$

它需要被“无”替换,请参见a demo on regex101.com


分解如下:
(?:                          # non-capturing group
    ^                        # anchor at the beginning of a string
    (?:\w_)?                 # \w_ optional
    (?:VIS|Vis|IR|LWIR|THE)  # one of ...
    [-_]?                    # - or _ optional
)
|                            # OR
(?:
    _?
    (?:VIS|Vis|IR|LWIR)
)?
\.jpg$

相关问题 更多 >