[英]python : extract sub string after delimiter
我想在最后一次出现分隔符时从初始字符串中提取子字符串:
例子
str1= "aaaa.{i}.bbbb.{i}.cccc.{i}."
str2= "aaaa.bbbb.{i}.cccc.{i}."
str3= "aaaa.bbbb.cccc.{i}."
预期结果是:
cccc
我使用以下 python 脚本:
res = str3.rsplit('.{i}.', 2)[1]
print(res)
但是对于str3
脚本没有显示预期的结果cccc
!
你需要类似的东西:
str1= "aaaa.{i}.bbbb.{i}.cccc.{i}."
str2= "aaaa.bbbb.{i}.cccc.{i}."
str3= "aaaa.bbbb.cccc.{i}."
def last_occur(st):
st = st.split('.{i}.')
st = list(filter(None, st))
return st[-1]
如果您只有一个拆分,这也将删除空字符串。
结果:
last_occur(str1) --> cccc
last_occur(str2) --> cccc
last_occur(str3) --> aaaa.bbbb.cccc
在所有情况下,不可能(r)split
一次并获得结果'cccc'
。 我想你知道,但你没有正确地将你的想法转化为 Python。
您可以rsplit
两次:
>>> str1.rsplit('.{i}.')[-2].rsplit('.')[-1]
'cccc'
>>> str2.rsplit('.{i}.')[-2].rsplit('.')[-1]
'cccc'
>>> str3.rsplit('.{i}.')[-2].rsplit('.')[-1]
'cccc'
或使用正则表达式:
>>> import re
>>> pattern = re.compile(r'^.*\.([^.]+).{i}.$')
>>> re.match(pattern, str1).group(1)
'cccc'
>>> re.match(pattern, str2).group(1)
'cccc'
>>> re.match(pattern, str3).group(1)
'cccc'
虽然我希望正则表达式解决方案的效率远低于双拆分方法,但我没有测量。 我也没有做任何错误处理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.