正则表达式在处理文本尤其是对文本进行过滤和筛选等工作时很有用,经常用于字符串的匹配等操作。
首先贴出一下常见的正则表达式的应用的情景。
匹配中文字符:[\u4e00-\u9fa5]
匹配由26个英文字符和数字组成的字符串:[a-zA-Z0-9]+
匹配空白行:\n\s*\r
匹配电话号码:\d{3}-\d{8}|\d{4}-\d{7},如0511-4405222或021-87888888
最近处理一个文档,第一步,需要过滤掉中文英文常见标点符号之外的特殊字符。
#python3主要代码
import re
regex = re.compile(u'[^0-9a-zA-Z\u4e00-\u9fa5,。!?;)(”“",::……]')
data_value[i] = regex.sub('',data_value[i])
第二步,去掉重复出现的标点符号。
p = re.compile(r"([,。!?;)(”“",::……]])(\1+)")
data_value[i] = p.sub(r'\1',data_value[i])
第三步,去掉过长的由英文和数字组成的字符串
q = re.compile(r"[a-zA-Z0-9]{10,}")
data_value[i] = q.sub('',data_value[i])
第四步,去掉由数字和字符组成的字符串
r = re.compile(r"[0-9,。!?;)(”“",::……]{2,}")
data_value[i] = r.sub('',data_value[i])
对于中文文档很多情况下还需要进行分词,可以采用结巴分词进行。
#主要分词过程
import jieba
length = len(data)
for i in range(length):
s = jieba.cut(dataB[i])
ss = ' '.join(s)
dataB[i] = ss
文档处理后的结果为: