我尝试通过从一个pandas数据帧中提取1-n行,这些行由一个“start”(示例中的SOMEWORD)和一个“stop”字(示例中的somestop word)之间的换行符拆分结构提取物方法,但它失败了,结果就是。 示例如下。你知道吗
我试着在regex101.com的帮助下构建regex,它可以工作,甚至当我在jupyter笔记本中复制regex101.com中自动生成的示例代码时,它也会像我所期望的那样提取行。你知道吗
熊猫示例代码结构提取物功能:
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 extract函数中转义\n而在regex101站点和“普通”regex代码中转义?模式示例:
您可以放弃lookaround并确保匹配换行符,并通过使用
re.DOTALL
修饰符(您可以将其设置为内联修饰符,(?s)
)重新定义.
行为:参见regex demo
细节
(?s)
-一个内联re.DOTALL
修饰符,使.
匹配任何字符,包括换行字符\nSOMEWORD\n \n
-一个文字子字符串,其中\n
与文字LF char匹配(\w.+?)
-group1(这个值将由str.extract
返回):一个单词char后跟1+个字符,尽可能少\nSOME STOP WORD
-一个LF和一个SOME STOP WORD
子串相关问题 更多 >
编程相关推荐