如何修改正则表达式以提取含Figure的完整句子(含小数与参考文献)
正则表达式修改方案:提取包含“Figure”的完整句子
问题根源
原正则((?<=^|\s)[A-Za-z0-9][^!?.]*(Figure)[^.]*(?=\.|\!|))的缺陷在于:
[^!?.]会排除所有句末标点,同时也把句子中的括号、小数点(如0.0001)这类合法字符当成分隔符,导致匹配提前中断[^.]同样限制了匹配范围,截断了包含括号的参考文献内容
修改后的正则表达式
(?<=^|(?<=[.!?]\s))[A-Z].*?(Figure.*?)(?=[.!?]|$)
规则解析
(?<=^|(?<=[.!?]\s)):正向预查,确保匹配起点是文本开头,或者句末标点(.!?)加空格之后,精准定位句子起始位置[A-Z]:匹配英文句子开头的大写字母,符合学术文本的句子格式.*?:非贪婪模式匹配任意字符,避免过度匹配到下一个句子(Figure.*?):精准捕获包含Figure的片段,非贪婪模式保证停在当前句的句末标点前(?=[.!?]|$):正向预查,确保匹配终点是句末标点(.!?)或者文本结尾,完整覆盖整句范围
测试效果
针对示例句子:
This effect (Smith et al., 2008) was seen in 0.0001% of samples (Figure 1b).
修改后的正则会完整提取:This effect (Smith et al., 2008) was seen in 0.0001% of samples (Figure 1b)
额外说明
如果文本中存在带句号的缩写(如Mr.),可能会触发误判,此时可以针对性补充排除规则(比如(?<!Mr|Ms|Dr)\.),但学术场景下包含Figure的句子通常句末标点明确,基础版本足以覆盖大多数需求。
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

