我只是想提取年份,而不是数字。如何定义不跟随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"不应该提取,因为它不是一年,而是一个数字
答案 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})"