Pandas中使用str.extract实现START到多终止词内容提取的正则问题
正则调整方案
你只需要把原来的单个终止词替换为非捕获可选组即可,调整后的正则如下:
(?s)START(.*?)(?:STOP\s+WORD|ANOTHER\s+DELIMITER)
正则说明
- 保留了你原有的
(?s)单行模式,支持跨行匹配内容 (?:STOP\s+WORD|ANOTHER\s+DELIMITER)是核心修改部分:?:表示这是个非捕获组,不会被str.extract作为单独结果返回,避免生成多余列|是正则或逻辑,会匹配两个终止词中先出现的那个
- 中间的
.*?惰性匹配保证只会取到第一个终止词之前的内容,符合你要的首个匹配要求
Pandas 调用示例
import pandas as pd # 构造测试数据 df = pd.DataFrame({ "content": [ "START hello there STOP WORD", "START Good morning ANOTHER DELIMITER", "START 跨行测试\n换行内容 STOP WORD" ] }) # 提取目标内容,自动去首尾空格(可选操作,按需保留) df["extract_result"] = df["content"].str.extract(r"(?s)START(.*?)(?:STOP\s+WORD|ANOTHER\s+DELIMITER)").apply(lambda x: x.str.strip())
运行后你给的两个示例会分别返回hello there和Good morning,完全符合预期。如果后续需要新增更多终止词,直接在非捕获组内用|追加即可。
内容的提问来源于stack exchange,提问作者user40739
相关产品推荐
相关产品推荐

