为了账号安全,请及时绑定邮箱和手机立即绑定

删除所有与 Python 中的正则表达式模式不匹配的内容

删除所有与 Python 中的正则表达式模式不匹配的内容

尚方宝剑之说 2021-12-21 10:47:38
我有一个正则表达式模式,用于标识一整列日期中的日期,但有些日期包含在一个字符串中,而有些则只是简单的日期本身。我的正则表达式模式完美地找到了每个日期,但现在我想能够说“删除不符合日期模式的所有内容”,这将删除某些日期之前或之后的文本。我想要的东西的例子:Mexico [12/20/1985] 如果我可以删除与模式不匹配的内容,那么括号和墨西哥就会消失假设我的正则表达式模式是(我还有两个匹配更具体的日期格式,但不包括它们,因为这无关紧要:pattern = (r"(19|20)\d\d")我正在使用has_date = data.str.contains(pattern),它可以完美地找到我要找的东西。但是,现在我已经确定了具有我想要的日期的观察结果,我需要去除/删除/替换所有不是那种模式的东西。我制作了一个文件,其中包含与正则表达式模式不匹配的内容以及匹配的内容,并检查以确保我的正则表达式模式包含所有内容,因此我在这方面做得很好。有人对如何替换不是我的模式有任何建议吗?欢迎任何想法。谢谢
查看完整描述

1 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

要解决您的确切问题,即替换与模式不匹配的所有内容,您可以使用

df['Data'] = df['Data'].str.replace(r"(?s)((?:19|20)\d\d)?.", r"\1")

请参阅正则表达式演示

在这里,(?s).匹配任何字符,((?:19|20)\d\d)?是一个可选的捕获组#1,它匹配19或匹配20任何 2 位数字 1 或 0 次,然后匹配任何带有.模式的字符。如果第 1 组匹配,由于\1反向引用,它将被放回结果中。

但是,您似乎只想从数据中提取年份,如果没有,只需获取一个空字符串,因此请使用

df['Data'] = df['Data'].str.extract(r'\b((?:19|20)\d{2})\b', expand=False).fillna('')

\b((?:19|20)\d{2})\b将匹配1920然后任何两个数字作为一个整体字(由于\b字边界)。


查看完整回答
反对 回复 2021-12-21
  • 1 回答
  • 0 关注
  • 275 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信