如何使用Python正则移除独立数字等字符 保留字符串内嵌数字
Python正则文本清洗:保留字符串内嵌数字方案
问题背景
做文本清洗时需要实现以下规则:
- 移除指定单词(示例中为
ORIGIN) - 移除所有空白字符
- 移除特殊字符
- 移除独立存在的数字,保留与单词/字符串结合的内嵌数字
示例原始文本:
ORIGIN 1 malwmrllp1 lallalwgpd paaafvnghl cgshlvealy lvcgergffy tpktrreaed 61 lqvgqvelgg gpgagslqpl alegslqkrg iveqcctsic slyqlenycn //
原有错误实现使用\W+匹配规则时,会把malwmrllp1中内嵌的数字1一并移除,错误代码:
import re text_file = open('mytext.txt').read() new_txt = re.sub('[\\b\\d+\\b\s*$+\sORIGIN$\W+]', '', text_file) print(new_txt, len(new_txt))
错误运行结果长度为109,丢失了内嵌数字:
malwmrllplallalwgpdpaaafvnghlcgshlvealylvcgergffytpktrreaedlqvgqvelgggpgagslqplalegslqkrgiveqcctsicslyqlenycn 109
预期输出为长度110、保留内嵌数字1的字符串:malwmrllp1lallalwgpdpaaafvnghlcgshlvealylvcgergffytpktrreaedlqvgqvelgggpgagslqplalegslqkrgiveqcctsicslyqlenycn
正确实现代码
核心逻辑是通过单词边界\b区分独立数字和内嵌数字,分步骤替换需要移除的内容,避免误删内嵌在字符串中的数字:
import re with open('mytext.txt', 'r') as f: text_content = f.read() # 第一步:移除指定固定词ORIGIN cleaned = re.sub(r'ORIGIN', '', text_content) # 第二步:移除前后为单词边界的独立数字,不碰和字母相连的内嵌数字 cleaned = re.sub(r'\b\d+\b', '', cleaned) # 第三步:移除所有非字母、非数字的字符(包含空白、特殊符号如//等) cleaned = re.sub(r'[^a-zA-Z0-9]', '', cleaned) print(cleaned, len(cleaned))
运行代码后输出结果长度为110,完全符合预期。
原理说明:单词边界
\b会匹配单词字符(字母、数字、下划线)和非单词字符的交界位置,\b\d+\b只会匹配前后都没有字母/数字依附的独立数字,和字母连在一起的内嵌数字不会触发该规则匹配,因此会被完整保留。
内容的提问来源于stack exchange,提问作者mickeywise
相关产品推荐
相关产品推荐

