python - 从字符串的两端删除子字符串
问题描述
我有一些文件名,其中包含一些我想删除的多余单词,例如:VIS
等THE
。
我是这个正则表达式,但问题是要删除的单词可能出现在文件名的前面或后面。为了更清楚,一些文件名示例是:
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']
多余的词是VIS
, Vis
, IR
, LWIR
,THE
和出现在前面的每个字符或出现在后面的每个字符。
正确的例子是:
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$
无需替换,请参阅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$
推荐阅读
- scala - Doobie - 将任意效果提升到 ConnectionIO
- sorting - 如何在power bi中按矩阵的降序对列日期进行排序
- prolog - 如何从 Prolog 中的选择中选择最短路径
- jquery - 单击 am 项目后下拉菜单永久隐藏
- python - 如何使用 python 将树莓派连接到另一台 PC 的数据库
- reactjs - React hooks useCallback 依赖于函数
- python - 使用 imgaug 增加数据集大小
- java - 我不知道为什么会出现这些输出,(java线程)
- javascript - 如何将 json 转换为 javascript 中的数组以获取 li 列表
- react-redux - React Redux Material-UI 自动完成