求助:如何提取含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
相关产品推荐
相关产品推荐

