非常好理解的python re正则表达式入手


直接写例子,来入手正则。

案例一

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)
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值