下述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
相关产品推荐
相关产品推荐

