如何使用正则表达式按起始关键词分别提取到指定个数句号处的内容
实现方案
完全可以通过正则表达式实现该需求,首先说明你原有代码的问题:
你写的正则^Admit: [.]$存在三个明显错误:
^和$是字符串首尾锚点,要求整个字符串完全匹配该规则,自然无法匹配长文本中的局部内容[.]仅匹配字面量的句号,没有编写匹配关键词到句号之间任意内容的规则- 没有适配
Discharge关键词需要匹配到第二个句号的规则
具体实现代码
import re source_text = "Admit: 15/06/2019 was been in HR hospital. This is usual precaution for accidents. Discharge: 18/06/2019 discharged from A/C room. This is from BRK Hospital." # 正则规则:两种匹配分支 pattern = r"Admit:[^.]*\.|Discharge:(?:[^.]*\.){2}" result = re.findall(pattern, source_text) # 输出结果 for item in result: print(item)
正则规则说明
Admit:[^.]*\.:匹配以Admit:开头的内容,[^.]*匹配所有非句号的字符,直到遇到第一个句号\.停止|:正则分支符,匹配左右任意一种规则即可Discharge:(?:[^.]*\.){2}:匹配以Discharge:开头的内容,(?:[^.]*\.)是非捕获组,匹配「任意非句号字符+一个句号」的组合,{2}表示匹配2次,也就是直到第二个句号停止
运行上述代码输出结果完全符合你的预期:
Admit: 15/06/2019 was been in HR hospital. Discharge: 18/06/2019 discharged from A/C room. This is from BRK Hospital.
内容的提问来源于stack exchange,提问作者user17040675
相关产品推荐
相关产品推荐

