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

使用正则表达式爬取文本时如何正确提取含v.标识的目标条目

正则匹配问题修复方案

原规则缺陷

你之前写的(?s)v\..*?(?:\d\d\d\d\))存在三个核心问题:

  • 开启了单行匹配模式,符号.会匹配换行符,多行文本下容易出现跨条目串匹配
  • 匹配起点固定从v.位置开始,无法捕获v.前方的案件主体内容
  • 没有设计前缀过滤逻辑,不能自动剔除条目开头的引导词、标点、冗余空格等无关内容

可用正则规则

关闭单行模式、开启多行模式,使用以下正则,提取第一个捕获组的内容即可得到目标结果:

(?:^|[\n;])\s*(?:[\w.]+\.|See)?\s*(.*?v\..*?\(\d{4}\))

规则逻辑说明:

  • 先匹配条目边界:行首、换行符、分句分号
  • 跳过边界后可能存在的冗余空格
  • 匹配并跳过常见的引用引导内容,比如See、e.g.这类引导词
  • 捕获组从有效案件名起始位置开始,向后匹配到v.,再匹配到四位年份+右括号的位置,完整覆盖目标内容

代码实现示例(Python)

import re

sample_text = """See Holiday in v. Marriot (2002)

e.g. FB v. Google (2012)

; Yahoo! v. Microsoft (2000)"""

# 编译正则,开启多行模式
regex = re.compile(r'(?:^|[\n;])\s*(?:[\w.]+\.|See)?\s*(.*?v\..*?\(\d{4}\))', re.M)
# 提取所有匹配结果,去除首尾多余空格
target_content = [item.group(1).strip() for item in regex.finditer(sample_text)]

# 打印输出结果
for line in target_content:
    print(line)

运行后输出结果完全符合需求:

Holiday in v. Marriot (2002)
FB v. Google (2012)
Yahoo! v. Microsoft (2000)

如果后续遇到其他类型的引导前缀,只需要在(?:[\w.]+\.|See)?这部分补充对应的前缀匹配规则即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:15:42