直接写例子,来入手正则。
案例一
1.去掉/剔除掉字符串中的某些特定字符
目标1:有一行字符串,去掉其中的非中文字符
实现1:keep_chinese()函数
目标2:有一行字符串,去掉其中的非中文、非英文、非数字字符
实现2:keep_chinese_and_num_and_eng()函数,用re.compile()和re.sub()
2.怎么实现
import re
def keep_chinese(line):
pattern = re.compile(r'[^\u4e00-\u9fa5]') #匹配非中文的字符
chinese = re.sub(pattern,'',line) #将非中文的替换为空字符
return chinese
def keep_chinese_and_num_and_eng(line):
"""
去除字符串中非中文、非数字、非英文的字符
"""
pattern = re.compile(r'[^\u4e00-\u9fa5^a-z^A-Z^0-9]')#匹配非中文、非英文、非数字的字符
new_line = re.sub(pattern, '', line) #将非...的字符替换为空字符
return new_line
if __name__ == '__main__':
line = "(2020, 001, '1号背诵《咏鹅》~~~鹅鹅鹅,曲项向天歌。白毛浮绿水,红掌拨清波。abc....')"
uid = line.split(',')[0]
fid = line.split(',')[1]
content = line.split(',',2)[2]#注意,split可以设置分隔两次
print(content)
print('------')
# new_content = keep_chinese(content)
new_content = keep_chinese_and_num_and_eng(content)
print(new_content)
newline = uid + ',' + fid + ',' + new_content + '\n'
输出:1号背诵咏鹅鹅鹅鹅曲项向天歌白毛浮绿水红掌拨清波abc
3.从案例中学习
1、re库:正则匹配功能
2、re.compile(r'[^\u4e00-\u9fa5]')
#匹配非中文的字符
re.compile(r'[^\u4e00-\u9fa5^a-z^A-Z^0-9]')
#匹配非中文、非英文、非数字的字符
3、re.sub(pattern, '', line)
#将非中文的替换为空字符
编译正则表达式:re.compile()
检索和替换:re.sub() 参数:pattern正则中的模式字符串,repl用来替换的字符串也可以是函数,string原字符串
4、pattern 模式
[^...]
不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符
[0-9]
匹配任何数字。类似于 [0123456789]
[a-z]
匹配任何小写字母
[a-zA-Z0-9]
匹配任何字母及数字
案例二
1.确实字符串是否仅包含某些特定字符
目标:判断字符串是否仅包含大小写字母数字和“_”“-”。eg.“01-word” “01-03”
实现:is_special_str()函数,用re.match()
2.具体实现
# 功能:判断是否是这样一个字符串:仅包含大小写字母数字和"-""_"
def is_special_str(query):
flag = False
pattern = r'[\dA-Za-z\-\_]+$'
result = re.match(pattern, query)
print(result)
# 字符串满足条件情况下:<_sre.SRE_Match object; span=(0, 7), match='01-word'> 类型:<class '_sre.SRE_Match'>
# 不满足条件情况下:None
if result:
flag = True
# 当result非None时,还能获取以下信息:
print(result.group())
print(result.span()) # (0,7) 匹配开始的(起始位置,终止位置)
print(result.start()) # 0
print(result.end()) # 7
# else:
# print("不满足")
return flag
if __name__ == "__main__":
query = "01-word"
# query = "01-word世界"
if is_special_str(query):
print("是")
3.案例学习
re.match(pattern, string, falgs):
从头(注意是从0位置来开始匹配)匹配一个符合规则的字符串
匹配成功返回一个match object对象;不成功则返回None
注意:match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回None
pattern:正则模型
string:要匹配的字符串
falgs:匹配模式
match还可以这样用:
result = re.match("喜欢", "我喜欢你的信息素") # 匹配不到
result = re.match("喜欢", "喜欢你的信息素") # 匹配的到
re.search()就都可以:
result = re.search("喜欢", "我喜欢你的信息素") # 匹配的到
result = re.search("喜欢", "喜欢你的信息素") # 匹配的到
match()和search()的区别:
match()函数只检测RE是不是在string的开始位置匹配
search() 会扫描整个string查找匹配
案例三
去掉字符串中的所有表情包
import emoji
emoji.demojize(str)