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

下述Python代码中正则表达式与列表推导式结合的作用是什么?

代码功能与逻辑解析

这段代码的核心作用是从解析后的文档节点中提取纯文本,并清理文本中的无效不可打印控制字符,最终得到规整的可用文本。

前两行核心逻辑拆分

第一行:预编译不可打印字符匹配正则

non_printable_re = re.compile(ur'(?:%s)' % '|'.join(
    [ chr(i) for i in range(1,31) if i != 10 ]))

我们从内到外拆解逻辑:

  • 列表推导式[ chr(i) for i in range(1,31) if i != 10 ]:
    ASCII码十进制1到30的字符全部属于不可打印的控制字符(比如退格、换页、垂直制表符、空字符等),这里的过滤条件i != 10是排除ASCII码为10的换行符\n,也就是仅保留换行符,其余所有低阶控制字符都纳入待清理范围。
  • '|'.join(上述列表):把所有待清理的控制字符用|拼接成字符串,对应正则规则里的「或匹配」逻辑,即匹配列表中任意一个控制字符。
  • ur'(?:%s)'是Python2版本的字符串前缀:u代表Unicode编码适配,r代表原始字符串避免转义冲突,(?:)是非捕获分组,仅用于聚合匹配规则,不需要保留匹配结果到分组中提升效率。
  • 整行最终得到一个预编译的正则对象,用于快速匹配除换行符外的所有ASCII 1~30号不可打印控制字符。

第二行:提取节点纯文本

obj_txt = lobj.get_text()

这里的lobj一般是BeautifulSoup解析HTML/XML后得到的节点对象,get_text()方法会提取节点内的所有纯文本内容,自动剔除所有HTML/XML标签。

后续行逻辑补充

  • non_printable_re.sub( '', obj_txt):用预编译的正则匹配文本中所有符合规则的不可打印控制字符,全部替换为空即完成清理。
  • obj_txt.strip():去掉清理后文本首尾的所有空白字符(空格、换行、制表符等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:45:02