如何使用正则表达式提取数据后面没有pandas的东西

时间:2017-08-10 01:07:23

标签: python regex pandas

我只是想提取年份,而不是数字。如何定义不跟随XXX?

我做了以下示例,但结果总是比我预期的文字更多。

text = ["hi2017", "322017"]
text = pd.Series(text)
myPat = "([^\d]\d{4})"

res = text.str.extract(myPat)
res

然后我得到了结果:

0    i2017
1      NaN
dtype: object

实际上,我只想获得" 2017",但不是" i2017",我该怎么做?

PS。 " 322017"不应该提取,因为它不是一年,而是一个数字

4 个答案:

答案 0 :(得分:2)

尝试一下:

(?<!\d)(\d{4})(?!\d)

返回2017年,几乎完全基于@PauloAlmeida的评论

答案 1 :(得分:2)

据我所知,您只需要年份,定义为4位数后跟非数字。

"(?:[a-z]+)(\d{4})$"适合我。 (表示4个数字后跟多个字符,4个数字是字符串的最后一个字符)

text = ["hi2017", "322017"]
text = pd.Series(text)
myPat = "(?:[a-z]+)(\d{4})$"

res = text.str.extract(myPat)

输出:

print(res)
'''
0    2017
1     NaN
'''

答案 2 :(得分:0)

您需要4位数字,其中第一个数字是1或2.这将转换为1000到2999之间的所有数字。

正则表达式为:(1[0-9]{3})|(2[0-9]{3})

这将获得1000到2999之间的所有数字,包括在字符串中。

在您的情况下,hi2017会产生2017。此外,322017会产生2201。根据您的定义,这也是有效年份。

答案 3 :(得分:-1)

Regexr是一款出色的在线工具http://regexr.com/3ghcq

myPat = "(\d{4})"