You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言中str_extract_all如何忽略\n且保留换行符用于后续处理?

解决str_extract_all匹配跨换行文本的问题

这问题我之前也碰到过!核心原因是正则表达式里的.默认不匹配换行符\n,所以你写的SESSÃO.*?(?=SESSÃO)中,.*?遇到换行就会停止匹配,自然抓不到两个SESSÃO之间的完整内容。不用删除换行符的话,有两个简单的解决方案:

方案一:启用Dotall模式(推荐)

在正则表达式开头加上(?s)修饰符,这个修饰符会让.匹配包括换行符在内的所有字符,这样就能完整捕获两个SESSÃO之间带换行的文本了:

str_extract_all(html, "(?s)SESSÃO.*?(?=SESSÃO)")

提取后的结果会完整保留原字符串中的换行符,完全满足你后续拆分的需求。

方案二:用[\s\S]替代.

如果不想用修饰符,也可以把.*?换成[\s\S]*?——\s匹配所有空白字符(包括换行),\S匹配所有非空白字符,两者组合起来就等同于匹配任意字符,同样能跨换行匹配:

str_extract_all(html, "SESSÃO[\s\S]*?(?=SESSÃO)")

这个写法的效果和方案一完全一致,选哪种全看你个人习惯。

另外补充个小细节:如果你的文本最后还有一段以SESSÃO结尾的内容,上面的正向预查(?=SESSÃO)会漏掉它。要是需要捕获最后一段,可以把正则调整为(?s)SESSÃO.*?(?=SESSÃO|$),这样就能同时匹配到最后一个SESSÃO之后的内容啦。

内容的提问来源于stack exchange,提问作者Felipe Ito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:40:58