python—正则表达式

概念

正则表达式,又称规则表达式,通常被用来检索、替换那些符合某个模式(规则) 的文本。

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字 符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表 达对字符串的一种过滤逻辑。

给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
∙ 给定的字符串是否符合正则表达式的过滤逻辑(“匹配”);
∙ 通过正则表达式,从文本字符串中获取我们想要的特定部分(“过滤”)。

在这里插入图片描述

正则表达式是由普通字符和特殊字符(元字符)组成的文字模式
正则表达式入门小例子

正则表达式测试网址:
https://tool.oschina.net/regex/.

示例:
我们想要找一篇英文文献里面的所有we的单词
文本:we are well Welcome 正则表达式:we
匹配所有的含有we的但是包括well welcome 正则表达式:\bwe\b 只匹配了we \b是正则表达式的特殊字符,称为元字符,匹配的是单词的开始和结束,也就是单词的分界 处。

import re
#将正则表达式编译成一个pattern对象
pattern=re.compile("we")

#使用findall方法全局搜索,返回一个列表

m=pattern.findall("we  work  well  welcome")

#1.使用\b字符进行匹配,只会匹配we单词,不匹配其他含有we的单词
pattern=re.compile(r"\bwe\b")


#2.使用findall方法全局搜索,返回列表

m2=pattern.findall("we  work  well  welcome")
print(m2)

结果:

['we']

Python 的 re 模块 在 Python 中,
我们可以使用内置的 re 模块来使用正则表达式。 有一点需要特别注意的是,正则表达式使用 对特殊字符进行转义,所以如果我 们要使用原始字符串,只需加一个 r 前缀,

示例:

import re

path1="c:\a\b\c"
#我们只需要打印c:a\b\c

print(path1)


#\会对特殊字符串转义
path2="c:\\a\b\c"
print(path2)


#我们需要输出原字符串,只需要加一个前缀r
path3=r"c:\a\b\c"
print(path3)

结果:

c:\c
c:\\c
c:\a\b\c

常见元字符:

{n,} 重复n次或更多次
{n,m} 重复n~m次
[a-z] 任意字符,匹配a-z的所有字符
[abc] a/b/c中的任意一个字符
{n} 重复n次
\b 匹配单词的开始和结束
\d 匹配数字
\w 匹配字母,数字,下划线
\s 匹配任意空白,包括空格,制表符(Tab),换行符
\W 匹配任意不是字母,数字,下划线的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开始和结束的位置
[^a] 匹配除了a以外的任意字符
[^(123|abc)] 匹配除了123或者abc这几个字符以外的任意字符

import re

#\d匹配数学
pattern1=re.compile("\d")
resultl=pattern1.findall("hello  123 567")
print(resultl)


#\d+匹配一个或者多个数字 如果是多个数字 则必须连续
pattern2=re.compile("\d+")
result2=pattern2.findall("hello 123  567  cu98de")
print(result2)

#\d{3,}匹配三次或者多次,必须连续
pattern3=re.compile("\d{3,}")
result3=pattern3.findall("hello  123  456  uu44jk6")
print(result3)

#\d{3}连续匹配三次
pattern4=re.compile("\d{3}")
result4=pattern4.findall("hello  123  456  uu4466jk633")
print(result4)

#\d{1,2}可以匹配一次,也可以匹配两次,以更多的优先
pattern5=re.compile("\d{1,2}")
result5=pattern5.findall("help 1223 456 uu4466jk633")
print(result5)

#re.I表示忽略大小写,[a-z]{5}匹配“a-z”的字母五次
pattern6=re.compile("[a-z]{5}",re.I)
result6=pattern6.findall("hello 123 456 u4466jk633")
print(result6)


#\w+ 匹配数字 字母 下划线 一次或者多次
pattern7=re.compile("\w+")
res7=pattern7.findall("hello 123 456 u4466jk633")
print(res7)


#\W+ 匹配不是数字 字母 下划线
pattern8=re.compile("\W+")
res8=pattern8.findall("hello 123 456 u4466jk633")
print(res8)


#[\w\W]+ 可以匹配所有字符 一次或者多次
pattern9=re.compile("[\w\W]+")
res9=pattern9.findall("hello 123 456 u4466jk633")
print(res9)


#[abc]+ 匹配a或者b 或者c 一次或者多次
pattern10=re.compile("[abc]+")
res10=pattern10.findall("helloa 123b 456 bbu4466jk633")
print(res10)

#[abc\123]+ 匹配不是abc或者123的字符
pattern11=re.compile("[abc\123]+")
res11=pattern11.findall("hello 123 a456 bbcau4466jk633")
print(res11)


#.*匹配任意字符 除了换行符
pattern12=re.compile(".*")
res12=pattern12.findall("helloa 123b 456 bbu4466jk633\n")
print(res12)

#re.I表示忽略大小写,[a-z]{5}匹配“a-z”的字母五次
pattern13=re.compile("[a-z]{8}",re.I)
# 只查找字符串0-8之间的字符,要前不要后(左闭右开)
result13=pattern6.findall("he23lerg434lo rtew123 vgert4356456 u4466jk633",0,8)
print(result13)

结果:

['1', '2', '3', '5', '6', '7']
['123', '567', '98']
['123', '456']
['123', '456', '446', '633']
['12', '23', '45', '6', '44', '66', '63', '3']
['hello']
['hello', '123', '456', 'u4466jk633']
[' ', ' ', ' ']
['hello 123 456 u4466jk633']
['a', 'b', 'bb']
['a', 'bbca']
['helloa 123b 456 bbu4466jk633', '', '']
[]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值