从(更多)复杂字符串中提取日期字符串(可能是正则表达式匹配)

时间:2016-07-15 03:13:18

标签: python regex string

我有一个类似'my_index-{year}'的字符串模板。
我做string_template.format(year=year)之类的事情,其中​​年份是一些字符串。结果是一些看起来像my_index-2011的字符串。

现在。我的问题。我有一个像my_index-2011这样的字符串和我的模板'my_index-{year}'什么可能是一个提取{year}部分的光滑方式?

[注意:我知道parse library]

的存在

5 个答案:

答案 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作为索引),你的索引可以包含连字符,你仍然可以适当地提取年份。