gpt4 book ai didi

python正则表达式给出空字符串

转载 作者:太空宇宙 更新时间:2023-11-03 14:28:52 24 4
gpt4 key购买 nike

首先,我是正则表达式的新手。但到目前为止,我爱上了他们。我正在使用正则表达式从我从渲染引擎获得的图像文件名中提取信息。到目前为止,这个正则表达式运行良好......

_([a-z]{2,8})_?(\d{1,2})?(\.|_)(\d{3,10})\.([a-z]{2,6})$

如果我对文件名使用 split() 方法,例如...

image_file_name_ao.0001.exr

我回来了我可以使用的漂亮的小列表....

['image_file_name', 'gi', None, '.', '0001', 'exr', '']

我唯一担心的是它总是最后返回一个空字符串。无论我如何更改或操纵正则表达式,它总是在列表末尾给我一个空字符串。我完全可以忽略它并继续前进,但我的问题是我的正则表达式是否做错了,或者我可以做些什么来让它不通过最后的空字符串?感谢您的宝贵时间。

最佳答案

难怪。 split 方法在出现正则表达式时拆分您的字符串(加上返回组范围)。并且由于您的正则表达式仅匹配到达行尾的子字符串(由末尾的 $ 表示),因此在文件名末尾没有什么可以分割的,而是一个空后缀('').

鉴于您已经在表达式中使用组“(...)”,您也可以使用 re.match(regex, string)。这会给你一个 MatchObject实例,您可以通过 groups() 从中检索包含您的组的元组:

# additional group up front
reg='(\S*)_([a-z]{2,8})_?(\d{1,2})?(\.|_)(\d{3,10})\.([a-z]{2,6})$'
print re.match(reg, filename).groups() # request tuple of group matches

编辑:我真的很抱歉,但我没有意识到您的模式与文件名字符串的第一个字符不匹配。我在我的回答中扩展了它。如果您想坚持使用 split() 的方法,您还可以更改原始模式,使文件名的最后部分不匹配,从而拆分。

关于python正则表达式给出空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15144553/

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