python正则表达式

前言:今天学习了正则表达式的内容,先上一张正则表达式的表格,如果要用到正则表达式,可以通过查这个表来了解正则表达式的语法规则。

在这里插入图片描述
在这里插入图片描述
2、正文
接下来通过具体的例子来说明正则表达式的用法。

'''
正则表示式:
指定好匹配的模式-pattern
选择相应的方法-match,search等
得到匹配结果-group
re.match #从开始位置开始匹配,如果开头没有则无
re.search #搜索整个字符串
re.findall #搜索整个字符串,返回一个list
'''
import re
input_str = '自然语言处理很重要。123abc789'
pattern = re.compile(r'.') #.表示除了换行符外,匹配所有
all_str = re.findall(pattern,input_str) #搜索整个字符串,返回list
print(all_str)
输出为:['自', '然', '语', '言', '处', '理', '很', '重', '要', '。', '1', '2', '3', 'a', 'b', 'c', '7', '8', '9']
#字符集合:[abc] 指定包含字符, [a-zA-Z] 来指定所以英文字母的大小写
# [^a-zA-Z] 指定不匹配所有英文字母
pattern = re.compile(r'[abc]') #匹配指定abc
all_str = re.findall(pattern,input_str)
print(all_str)
pattern = re.compile(r'[a-zA-Z]') #匹配a-zA-Z
all_str = re.findall(pattern,input_str)
print(all_str)
pattern = re.compile(r'[^a-zA-Z]') #不匹配所有英文字符
all_str = re.findall(pattern,input_str)
print(all_str)
输出为:
['a', 'b', 'c']
['a', 'b', 'c']
['自', '然', '语', '言', '处', '理', '很', '重', '要', '。', '1', '2', '3', '7', '8', '9']
#或方法
pattern = re.compile(r'[a-zA-Z]|[0-9]')
all_str = re.findall(pattern,input_str)
print(all_str)
输出为:['1', '2', '3', 'a', 'b', 'c', '7', '8', '9']
#匹配数字‘\d’,相当于匹配[0-9]
pattern = re.compile(r'\d')
data1 = re.findall(pattern,input_str)
print(data1)
输出为:
['1', '2', '3', '7', '8', '9']
#匹配非数字'\D'
pattern = re.compile(r'\D')
data2 = re.findall(pattern,input_str)
print(data2)
输出为:
['自', '然', '语', '言', '处', '理', '很', '重', '要', '。', 'a', 'b', 'c']
#'\w'匹配字母或者数字
pattern = re.compile(r'\w')
data3 = re.findall(pattern,input_str)
print(data3)
输出为:['自', '然', '语', '言', '处', '理', '很', '重', '要', '1', '2', '3', 'a', 'b', 'c', '7', '8', '9']
#'\W'匹配非字母和数字
pattern = re.compile(r'\W')
data4 = re.findall(pattern,input_str)
print(data4)
输出为:
['。']
#正则表达式可以匹配不定长的字符串
#‘+’ 1 次或多次匹配
pattern = re.compile(r'\d+')
data = re.findall(pattern,input_str)
print(data)
输出为:
['123', '789']
#‘?’ 0 或 1 次匹配
pattern = re.compile(r'\d?')
data = re.findall(pattern,input_str)
print(data)
输出为:
['', '', '', '', '', '', '', '', '', '', '1', '2', '3', '', '', '', '7', '8', '9', '']
#精确匹配和最小匹配
#‘{m}’ 精确匹配 m 次
pattern = re.compile(r'\d{3}')
data = re.findall(pattern,input_str)
print(data)
输出为:['123', '789']
#{m,n}’ 匹配最少 m 次,最多 n 次。 (n>m)
pattern = re.compile(r'\d{1,3}')
data = re.findall(pattern,input_str)
print(data)
输出为:
['123', '789']
'''
match和seach
它们的返回不是一个简单的字符串列表,而是一个 MatchObject,可以得到更多的信息。
如果匹配不成功,它们则返回一个 NoneType 。所以在对匹配完的结果进行操作之前,必需先判断一下是否匹配成功了。
match 从字符串的开头开始匹配,如果开头位置没有匹配成功,就算失败了;而 search 会跳过开头,继续向后寻找是否有匹配的字符串。
'''
input1 = '12自然语言处理34语音识别56深度学习78图像处理'
pattern = re.compile(r'\d')
data = re.search(pattern,input1)
print(data)
<re.Match object; span=(0, 1), match='1'>
'''
字符串的替换和修改
在目标字符串中规格规则查找匹配的字符串,再把它们替换成指定的字符串。你可以指定一个最多替换次数,否则将替换所有的匹配到的字符串。
sub ( rule , replace , target [,count] )
subn(rule , replace , target [,count] )
第一个参数是正则规则,第二个参数是指定的用来替换的字符串,第三个参数是目标字符串,第四个参数是最多替换次数。
sub 返回一个被替换的字符串
subn 返回一个元组,第一个元素是被替换的字符串,第二个元素是一个数字,表明产生了多少次替换。
'''
pattern = re.compile(r'\d')
data = re.sub(pattern,'数',input1)
print(data)
输出为:数数自然语言处理数数语音识别数数深度学习数数图像处理
data = re.subn(pattern,'',input1)
print(data)
输出为:('自然语言处理语音识别深度学习图像处理', 8)
'''
split 切片函数。使用指定的正则规则在目标字符串中查找匹配的字符串,用它们作为分界,把字符串切片。
split( rule , target [,maxsplit] )
第一个参数是正则规则,第二个参数是目标字符串,第三个参数是最多切片次数,返回一个被切完的子字符串的列表
'''
pattern = re.compile(r'\d+')
data = re.split(pattern,input1)
print(data)
['', '自然语言处理', '语音识别', '深度学习', '图像处理']
#‘(?P…)’ 命名组
pattern = re.compile(r'(?P<dota>\d+)(?P<lol>\D+)') #dota表示数字,lol表示非数字
data = re.search(pattern,input1)
print(data.group('dota'))
输出为:12
#筛选号码
input = 'number 338-343-220'
pattern = re.compile(r'(\d\d\d-\d\d\d-\d\d\d)')
m = re.search(pattern,input)
print(m.groups())
('338-343-220',)

3、总结近来好久没打代码了,感觉很多东西都忘了,看来还是要好好打代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值