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

使用re.search与'in'无法检测bs4解析节点中日期子串的问题

解决方法

1. 排查字符编码差异

先打印两个字符串每个字符的Unicode编码,确认是否存在肉眼不可见的差异:

def print_char_details(s):
    for idx, char in enumerate(s):
        print(f"位置 {idx}: '{char}' - Unicode码点 U+{ord(char):04X}")

# 打印目标日期的字符细节
print("=== 目标日期字符详情 ===")
print_char_details(second_date.strip().lower())

# 打印节点文本的字符详情
print("\n=== 节点文本字符详情 ===")
print_char_details(node.text.strip().lower())

对比输出,重点关注:

  • 空格是否为普通空格(U+0020),还是其他Unicode空格(如U+2002、U+2003)
  • 逗号、数字是否为半角格式(逗号U+002C,数字U+0030-U+0039),而非全角(逗号U+FF0C,数字U+FF10-U+FF19)
  • 是否存在零宽字符(如U+200B零宽空格)

2. 全面清理字符串特殊字符

替换所有Unicode空白字符,并统一全角/半角字符:

方法一:正则批量替换空白字符

import re

with open(filepath, 'r', encoding="utf-8", errors="ignore") as file:
    content = file.read()
    # 替换所有Unicode空白字符为普通空格,合并连续空格
    content = re.sub(r'\s+', ' ', content)
    # 可选:将全角逗号、数字转为半角
    content = content.replace(',', ',').replace('0','0').replace('1','1').replace('2','2').replace('3','3').replace('4','4').replace('5','5').replace('6','6').replace('7','7').replace('8','8').replace('9','9')

方法二:Unicode标准化处理

import unicodedata
import re

with open(filepath, 'r', encoding="utf-8", errors="ignore") as file:
    content = file.read()
    # NFKC标准化:统一全角/半角、兼容字符格式
    content = unicodedata.normalize('NFKC', content)
    # 合并连续空格
    content = re.sub(r'\s+', ' ', content)

3. 确认节点文本完整性

如果上述方法无效,检查当前遍历的node是否真的包含完整日期文本:

  • 打印节点的HTML结构,确认日期未被拆分到子节点:
print(node.prettify())

若日期分散在多个子节点,需调整遍历逻辑(比如遍历父节点或合并子节点文本)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 10:37:28