猿问

Python重新找到下划线和ext之间的字符串

我有以下字符串


"1206292WS_R0_ws.shp"

我正在尝试重新显示所有内容,除了第二个“ _”和“ .shp”之间的内容


在这种情况下,输出将为“ ws”。


我已经设法删除了.shp,但是对我而言,我一生都无法弄清楚如何消除“ _”之前的所有内容


epass = "1206292WS_R0_ws.shp"


regex = re.compile(r"(\.shp$)")


x = re.sub(regex, "", epass)

产出


1206292WS_R0_ws

所需的输出:


ws


交互式爱情
浏览 143回答 3
3回答

慕桂英3389331

你真的不需要这个正则表达式print epass.split("_")[-1].split(".")[0]>>> timeit.timeit("epass.split(\"_\")[-1].split(\".\")[0]",setup="from __main__import epass")0.57268652953933608>>> timeit.timeit("regex.findall(epass)",setup="from __main__ import epass,regex0.59134766185007948两者的速度似乎非常相似,但拆分时速度要快一点实际上到目前为止最快的方法是print epass.rsplit("_",1)[-1].split(".")[0]在100k长的字符串上(在我的系统上)需要3秒,而其他任何一种方法则需要35秒以上如果您实际上是指第二个_而不是最后一个_,那么您可以这样做epass.split("_",2)[-1].split(".")  尽管取决于第二个_是正则表达式的位置可能会快也可能快

有只小跳蛙

另外,如果您不希望使用正则表达式,则可以使用rfind和find方法epass[epass.rfind('_')+1:epass.find('.')]
随时随地看视频慕课网APP

相关分类

Python
我要回答