我有一个类似'my_index-{year}'
的字符串模板。
我做string_template.format(year=year)
之类的事情,其中年份是一些字符串。结果是一些看起来像my_index-2011
的字符串。
现在。我的问题。我有一个像my_index-2011
这样的字符串和我的模板'my_index-{year}'
什么可能是一个提取{year}
部分的光滑方式?
[注意:我知道parse library
]
答案 0 :(得分:2)
使用split()
字符串函数将字符串拆分为短划线周围的两部分,然后抓住第二部分。
mystring = "my_index-2011"
year = mystring.split("-")[1]
答案 1 :(得分:2)
我假设“年”是4位数,你有多个索引
import re
res = ''
patterns = [ '%s-[0-9]{4}'%index for index in idx ]
for index,pattern in zip(idx,patterns):
res +=' '.join( re.findall(pattern ,data) ).replace(index+'-','') + ' '
--- ---更新
dummyString = 'adsf-1234 fsfdr lkjdfaif ln ewr-1234 adsferggs sfdgrsfgadsf-3456'
dummyIdx = ['ewr','adsf']
输出
1234 1234 3456
答案 2 :(得分:2)
是的,正则表达式在这里会有所帮助。
In [1]: import re
In [2]: s = 'my_string-2014'
In [3]: print( re.search('\d{4}', s).group(0) )
2014
编辑:我应该提到你的正则表达式可以更复杂。您可以拖出更具体的字符串的子组件,例如:
In [4]: print( re.search('my_string-(\d{4})$', s).group(1) )
2014
鉴于您提出的问题,我认为任何“找到年份”公式都应该以正则表达式表达。
答案 3 :(得分:2)
这个名为parse
的模块与format()
功能相反:
使用基于Python format()语法的规范解析字符串。
>>> from parse import parse
>>> s = "my_index-2011"
>>> f = "my_index-{year}"
>>> parse(f, s)['year']
'2011'
另外一个选择,因为你提取一年,就是在模糊模式下使用dateutil
parser:
>>> from dateutil.parser import parse
>>> parse("my_index-2011", fuzzy=True).year
2011
答案 4 :(得分:1)
您将要使用string method split
拆分“ - ”,然后将最后一个元素作为您的年份:
year = "any_index-2016".split("-")[-1]
因为你抓住了最后一个元素(使用-1作为索引),你的索引可以包含连字符,你仍然可以适当地提取年份。