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

带有正则表达式的熊猫提取函数的行为与“正常”正则表达式提取不同?

带有正则表达式的熊猫提取函数的行为与“正常”正则表达式提取不同?

largeQ 2021-09-28 14:08:43
我尝试通过 str.extract 方法从 Pandas 数据帧中通过换行符提取 1-n 行 splittet,它们位于“开始”(示例中的 SOMEWORD)和“停止”字(示例中的 SOME STOP WORD)之间,但它失败,结果只是 NaN。下面提供了示例。我试图在 regex101.com 的帮助下构建正则表达式,并且在那里它可以工作,甚至当我在我的 jupyter 笔记本中从 regex101.com 复制自动生成的示例代码时,它也会按照我的预期提取行。使用 pandas str.extract 函数的示例代码:testInput = pd.DataFrame({'text': ['\nSOMEWORD\n---------- \nFirstline with some text\nSecondline with some text\nThirdline with some text\nSOME STOP WORD\n-------------------\n']})pattern = r'(?<=\nSOMEWORD\n----------\n)(\w.+?(?=\nSOME STOP WORD))'test = testInput.iloc[0].str.extract(pattern)test输出:text    NaNName: 0, dtype: object使用 regex101.com 的示例代码(我只包含链接,以便帖子不会太长。在站点上,您还可以复制自动生成的代码,该代码正在工作并且只提取开始词和停止词之间的行):https ://regex101.com/r/JM6Sgc/1因此我的两个问题:为什么我的正则表达式不能与 pandas str 提取函数一起使用为什么我不想要跳脱\ n的大熊猫提取功能,但是,regex101网站藏汉在“普通”正则表达式的代码?示例模式:模式 = r'(?<=\\nSOMEWORD\\n---------\\n)(\w.+)'模式 = r'(?<=\nSOMEWORD\n---------\n)(\w.+)'成功提取第一行:无法提取第一行并输出 NaN:
查看完整描述

1 回答

?
智慧大石

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

您可以放弃环视并确保匹配换行符并.使用re.DOTALL修饰符重新定义行为(您可以将其设置为内联修饰符,(?s)):

r'(?s)\nSOMEWORD\n----------\n(\w.+?)\nSOME STOP WORD'

查看正则表达式演示

细节

  • (?s)- 一个内联re.DOTALL修饰符,可以.匹配任何字符,包括换行符

  • \nSOMEWORD\n----------\n-\n与文字 LF 字符匹配的文字子字符串

  • (\w.+?)- 第 1 组(该值将由 返回str.extract):一个单词 char 后跟 1+ 个字符,尽可能少

  • \nSOME STOP WORD- 一个 LF 和一个SOME STOP WORD子串


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

添加回答

举报

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