繁体   English   中英

python:在分隔符后提取子字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM