我该如何解析foll.在python中提取年份:
'years since 1250-01-01 0:0:0'
Run Code Online (Sandbox Code Playgroud)
答案应该是1250
ale*_*cxe 11
有各种方法可以做到这一点,这里有几个选项:
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
Run Code Online (Sandbox Code Playgroud)具有捕获组的正则表达式:
In [2]: import re
In [3]: re.search(r"years since (\d{4})", s).group(1)
Out[3]: '1250'
Run Code Online (Sandbox Code Playgroud)按"自"分裂然后按破折号:
In [2]: s.split("since", 1)[1].split("-", 1)[0].strip()
Out[2]: '1250'
Run Code Online (Sandbox Code Playgroud)或者甚至可以通过第一个破折号分割并切割第一个子字符串:
In [2]: s.split("-", 1)[0][-4:]
Out[2]: '1250'
Run Code Online (Sandbox Code Playgroud)最后两个涉及更多"移动部件",可能不适用,具体取决于输入字符串的可能变化.
您可以使用带有围绕四位数的捕获组的正则表达式,同时还要确保围绕它具有特定模式.我可能会寻找一些东西:
4位数和一个捕获 (\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'
Run Code Online (Sandbox Code Playgroud)
如果你需要它作为一个int,只需将其转换为:
>>> int(d[0])
1250
Run Code Online (Sandbox Code Playgroud)