代码学习:
extract_conv.py文件:
函数1:
def make_split(line):
if re.match(r'.*([,…?!\.,!?])$', ''.join(line)):
return []
return [', ']
首先,定义函数 make_split():其主要实现功能是匹配开头为.*([,…?!\.,!?])$的字符串,若有这些字符串,将其用空格 表示。用空格 代替来连接line中的字符串。
re.match(r‘ ’)中,r的含义是精确匹配,防止转义(eg:\t表示空格,等)。
#注:.join()函数:
str = "-"
seq = ("a", "b", "c") # 字符串序列
print(str.join( seq )) #输出 a-b-c
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字 等价于 '[^A-Za-z0-9_]'。
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
\w能不能匹配汉字要视你的操作系统和你的应用环境而定
元字符(*),匹配0个或多个
元字符(?),匹配一个或者0个
元字符(+), 匹配一个或者多个
元字符(|), 表示"或",如A|B,其中A,B为正则表达式,表示匹配A或者B
元字符({})
正则表达式相关学习链接可看:正则表达式特殊符号及用法
正则表达式详解
eg:input:你好?我是韩梅梅...
output:你好我是韩梅梅
—————————————————————————华丽分割线——————————————————————————
函数2:
def good_line(line):
if len(re.findall(r'[a-zA-Z0-9]', ''.join(line)))>2:
return False
return True
在输入中找到是否含有a-z、A-Z或0-9这样的大小写英文字母和0-9数字。长度大于两个字符则返回Flase,否则返回True。
eg:
import re
def good_line(line):
if len(re.findall(r'[a-zA-Z0-9]', ''.join(line)))>2:
return False
return True
#line = "今天天气不错,出去打球吗?一起来吧."
line = "今天天气不99错,出5去打球吗?一起3来吧."
new_line = good_line(line)
print(new_line)
print(len(re.findall(r'[a-zA-Z0-9]', ''.join(line))))
#输出:False
4
—————————————————————————华丽分割线——————————————————————————
函数3:
def regular(sen):
sen = re.sub(r'\.{3,100}', '…', sen) #将输入中重复三次以上的.转换为…。注转义符\:因为.表示匹配除了换行符外的任何字符,加上\之后仅仅表示 .这个具体符号
sen = re.sub(r'…{2,100}', '…', sen) #将输入中重复两次次以上的…转换为…
sen = re.sub(r'[,]{1,100}', ',', sen) #将输入中重复一次以上的"英文,"转换为“汉语的,”
sen = re.sub(r'[\.]{1,100}', '。', sen) #将输入中出现一次以上的.转换成。,个人理解如果.重复三次以上,则与sen = re.sub(r'\.{3,100}', '…', sen)同义,否则出现一次或两次转换成。
sen = re.sub(r'[\?]{1,100}', '?', sen) #将输入中出现一次以上的"英文?"转换成“中文?”个人理解/没有意义,因为?不需要转移,/没有意义。
sen = re.sub(r'[!]{1,100}', '!', sen) #将输入中出现一次以上的"英文!"转换成“中文!”
return sen
eg:
import re
def regular(sen):
sen = re.sub(r'\.{3,100}', '…', sen) #将输入中重复三次以上的.转换为…。注转义符\:因为.表示匹配除了换行符外的任何字符,加上\之后仅仅表示 .这个具体符号
sen = re.sub(r'…{2,100}', '…', sen) #将输入中重复两次次以上的…转换为…
sen = re.sub(r'[,]{1,100}', ',', sen) #将输入中重复一次以上的"英文,"转换为“汉语的,”
sen = re.sub(r'[\.]{1,100}', '。', sen) #将输入中出现一次以上的.转换成。,个人理解如果.重复三次以上,则与sen = re.sub(r'\.{3,100}', '…', sen)同义,否则出现一次或两次转换成。\可删除因为在[]内,特殊符号无其特殊意义。详情见https://www.cnblogs.com/LoveFishC/p/4218366.html
sen = re.sub(r'[\?]{1,100}', '?', sen) #将输入中出现一次以上的"英文?"转换成“中文?”个人理解/没有意义,因为?不需要转移,/没有意义。自己认为可删除,而且因为在[]内,特殊符号无其特殊意义。
sen = re.sub(r'[!]{1,100}', '!', sen) #将输入中出现一次以上的"英文!"转换成“中文!”
return sen
#line = "今天天气不错,出去打球吗?一起来吧."
line = "今天天气不错.出去打球吗?一起来吧..."
new_line = regular(line)
print(line)
print(new_line)
#输出:今天天气不错.出去打球吗?一起来吧...
#今天天气不错。出去打球吗?一起来吧…
#两句话的意义相同,因为在[]中,特殊符号失去其特有意义
sen = re.sub(r'[.]{3,100}', '…', sen)
sen = re.sub(r'\.{3,100}', '…', sen)
—————————————————————————华丽分割线——————————————————————————
以上句子的清洗过程就大体结束了。