gpt4 book ai didi

python - 删除字符串两端的子字符串

转载 作者:行者123 更新时间:2023-12-01 08:54:46 25 4
gpt4 key购买 nike

我有一些文件名包含一些我想删除的冗余单词,例如: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

那么,我如何才能摆脱后面的单词呢?

最佳答案

使用您可以使用的示例

(?:^(?:\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$

关于python - 删除字符串两端的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52854312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com