gpt4 book ai didi

python - pandas 正则表达式提取函数的行为与 "normal"正则表达式提取不同?

转载 作者:太空宇宙 更新时间:2023-11-03 21:24:20 31 4
gpt4 key购买 nike

我尝试通过 str.extract 从 pandas 数据帧中提取位于“开始”(示例中的某个单词)和“停止”单词(示例中的某个停止词)之间的换行符的 1-n 行 splittet方法,但失败了,结果只是 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 提取函数一起使用
  • 为什么我不需要需要在 pandas 提取函数中转义\n 而在 regex101 网站以及“普通”正则表达式代码中?示例模式:

    • 成功提取第一行:
      • pattern = r'(?<=\nSOMEWORD\n---------\n)(\w.+)'
    • 无法提取第一行并输出 NaN:
      • pattern = r'(?<=\\nSOMEWORD\\n------------\\n)(\w.+)'

最佳答案

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

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

请参阅regex demo

详细信息

  • (?s) - 内联 re.DOTALL 修饰符,使 . 匹配包括换行符在内的任何字符
  • \nSOMEWORD\n---------\n - 文字子字符串,其中 \n 与文字 LF 字符匹配
  • (\w.+?) - 第 1 组(该值将由 str.extract 返回):一个单词字符后跟 1 个以上字符,尽可能少尽可能
  • \nSOME STOP WORD - 一个 LF 和一个 SOME STOP WORD 子字符串

关于python - pandas 正则表达式提取函数的行为与 "normal"正则表达式提取不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53962822/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com