我该如何在Python中解析以下内容以提取年份:
'years since 1250-01-01 0:0:0'
答案应该是1250。
有许多方法可以做到这一点,以下是几个选项:
使用“模糊”模式中的dateutil
解析器:
In [1]: s = 'years since 1250-01-01 0:0:0'
In [2]: from dateutil.parser import parse
In [3]: parse(s, fuzzy=True).year # resulting year would be an integer
Out[3]: 1250
带有捕获组的正则表达式:
In [2]: import re
In [3]: re.search(r"years since (\d{4})", s).group(1)
Out[3]: '1250'
按“since”进行分割,然后再按破折号进行分割:
In [2]: s.split("since", 1)[1].split("-", 1)[0].strip()
Out[2]: '1250'
或者甚至是通过第一个破折号进行分割,并切割第一个子字符串:
In [2]: s.split("-", 1)[0][-4:]
Out[2]: '1250'
根据输入字符串的可能变化情况,后两个涉及更多的“移动部件”,可能不适用。
(\d{4})
- 连字符 -
- 两个数字 \d{2}
- 连字符 -
- 两个数字 \d{2}
这将给出: (\d{4})-\d{2}-\d{2}
示例:>>> import re
>>> d = re.findall('(\d{4})-\d{2}-\d{2}', 'years since 1250-01-01 0:0:0')
>>> d
['1250']
>>> d[0]
'1250'
如果你需要将它作为整数使用,只需将其强制转换为int类型即可:
>>> int(d[0])
1250
^.*\(d{4})-\d{2}-\d{2}.*$