如何使用正则表达式提取数据,而不是后面跟pandas

2024-05-29 01:42:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我只想提取年份,但不是数字。我如何定义后面不跟XXX?在

我做了下面的例子,但是结果总是比我预期的多。在

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

res = text.str.extract(myPat)
res

然后我得到了结果:

^{pr2}$

其实,我只想得到“2017”,而不是“i2017”,我怎么办?在

不应提取“322017”,因为它不是一年,而是一个数字


Tags: text定义extractres数字例子xxxseries
3条回答

您需要4位数字,其中第一位数字是1或2。这意味着1000到2999之间的所有数字,包括在内。在

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

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

在您的例子中,hi2017将产生{}。另外,322017将产生{}。根据你的定义,今年也是有效的一年。在

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

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

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

res = text.str.extract(myPat)

输出:

^{pr2}$

试试看:

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

它将于2017年回归,几乎完全基于@PauloAlmeida的评论

相关问题 更多 >

    热门问题