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

我尝试通过 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    NaN

Name: 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:


    largeQ
    浏览 154回答 1
    1回答

    智慧大石

    您可以放弃环视并确保匹配换行符并.使用re.DOTALL修饰符重新定义行为(您可以将其设置为内联修饰符,(?s)):r'(?s)\nSOMEWORD\n----------\n(\w.+?)\nSOME&nbsp;STOP&nbsp;WORD'查看正则表达式演示细节(?s)- 一个内联re.DOTALL修饰符,可以.匹配任何字符,包括换行符\nSOMEWORD\n----------\n-\n与文字 LF 字符匹配的文字子字符串(\w.+?)- 第 1 组(该值将由 返回str.extract):一个单词 char 后跟 1+ 个字符,尽可能少\nSOME STOP WORD- 一个 LF 和一个SOME STOP WORD子串
    打开App,查看更多内容
    随时随地看视频慕课网APP

    相关分类

    Python