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

求助:如何提取含AM/PM时间后跟随•的目标字符串?

解决AM/PM与时间连写的正则匹配问题

我懂你的困扰——因为AM/PM直接跟在数字后面(比如10:37AM),数字和字母都属于单词字符(\w),它们之间不存在单词边界\b,所以你原本用\bAM\b或\bPM\b的匹配方式根本抓不到目标内容。

这里有两种可靠的解决思路,帮你精准提取•后的字符串:

思路一:用正则捕获组精准匹配

直接匹配AM/PM后紧跟•的模式,同时捕获•后面的内容,这样能确保你提取的是符合格式的目标字符串,避免误匹配其他无关行:

import re

file_path = "你的文本文件路径.txt"
for line_num, line in enumerate(open(file_path), start=1):
    # 匹配AM/PM + 可选空格 + • + 可选空格 + 目标内容
    match_result = re.search(r'(AM|PM)\s*•\s*(.*)', line)
    if match_result:
        source_content = match_result.group(2).strip()
        print(f"第{line_num}行的目标内容:{source_content}")

这个正则的逻辑拆解:

  • (AM|PM):精准匹配AM或PM
  • \s*:兼容AM/PM和•之间可能存在的0个或多个空格
  • •:匹配固定的分隔符
  • (.*):捕获•后面的所有内容(直到行尾)
  • 最后用.strip()去掉内容前后的多余空格

思路二:简化匹配逻辑,先确认行再分割

如果你能确定所有包含AM/PM的行都带有•,也可以先判断行内存在AM/PM,再通过分割提取内容:

import re

file_path = "你的文本文件路径.txt"
for line_num, line in enumerate(open(file_path), start=1):
    # 直接匹配AM或PM,无需依赖单词边界
    if re.search(r'AM|PM', line):
        parts = line.split('•')
        if len(parts) > 1:
            source_content = parts[1].strip()
            print(f"第{line_num}行的目标内容:{source_content}")

这种方式更简洁,但要注意加len(parts) > 1的判断,避免行内有AM/PM却没有•时出现索引错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:51:09