2019-06-19正则表达式

为什么引入正则表达式?

  • 用来匹配一类具有相同规则的字符串
    正则分正则替换和正则匹配
    规则:
    PS:不要试图去看懂别人的正则,在一个特定的情况下我们只需自己完成自己需求的功能就好了
  • 单字符:
    【.】: 除换行以外所有的字符
    【[ ]】:[aoe], [a-w]匹配集合中任意一个字符
    【\d】:数字0~9
    【\D】:非数字
    【\w】:数字,字母,下划线,中文
    【\W】:非\w
    【\s】:所有的空白字符
    【\S】:非空白
  • 数量修饰(控制次数)
    【*】:任意多次 >=0
    【+】:至少一次 >=1
    【?】: 可有可无 0次或者1次
    【{m}】:固定m次
    【{m,}】:至少m次
    【{m,n}】:m到n次
  • 边界
    【\b】
    【\B】
    【$】:以某某结尾
    【^】:以某某开头
  • 分组
    【()】视为一个整体 (){4}--->ab{4}和(ab){4}区别
    【()】子模式 \组模式 \1 \2
import re
string='

猪八戒

' pattern=re.compile(r'<(\w+)><(\w+)>\w+') ret=pattern.search(string) print(ret)

显示:


[Finished in 0.1s]
  • 贪婪模式
    【.*?】
    【.+?】
import re
string='
如来佛祖
' pattern=re.compile(r'
.*
') ret=pattern.search(string) print(ret)

匹配显示:

match='
如来佛祖
'>

加?后

import re
string='
如来佛祖
' pattern=re.compile(r'
.*?
') ret=pattern.search(string) print(ret)

匹配显示:

match='
如来佛祖
'>
  1. re.I :忽略大小写
  2. re.M :多行匹配
import re
string='''hate is beautiful feel
love you very much
love she
love her'''

pattern=re.compile(r'^love',re.M)

ret=pattern.search(string) #search方法只能找到一个

print(ret)

显示:

match='love'>

想显示多个用findall

ret=pattern.findall(string) #search方法只能找到一个

显示:

['love', 'love', 'love']
  1. re.S :单行匹配
    举例:
import re
string='''
沁园春-雪 北国风光 千里冰封 万里雪飘 望长城内外 惟余莽莽 大河上下 顿失滔滔 山舞银蛇 原驰蜡像 欲与天公试比高
''' pattern=re.compile(r'
(.*?)
',re.S) ret=pattern.findall(string) print(ret)

显示:

['沁园春-雪\n北国风光\n千里冰封\n万里雪飘\n望长城内外\n惟余莽莽\n大河上下\n顿失滔滔\n山舞银蛇\n原驰蜡像\n欲与天公试比高\n']
[Finished in 0.1s]

匹配OK
假如把这句:

pattern=re.compile(r'
(.*?)
',re.S)

换成:

pattern=re.compile(r'
(\w+)
',re.S)

匹配失败:

[]
[Finished in 0.1s]

原因是\w+不能匹配换行符

pattern=re.compile(r'
(.*?)
',re.S)

这一句后面的re.S不加也会fail,加了后 . 点也可以匹配换行(点的含义是能匹配任何除换行以外的任何字符。加了re.S后可以匹配换行符)

import re
string='i love you,you love me,ye'

pattern=re.compile(r'love')
ret=re.sub(r'love','hate',string)
# ret=re.sub(pattern,'hate',string)
# ret=pattern.sub('hate',string)#把love替换成hate

print(ret)

显示:

i hate you,you hate me,ye
[Finished in 0.1s]

替换内容可以是函数:
解释下:
正则匹配到的内容会传递给这个函数,这个函数里面可以对它进行处理,最后这个函数必须返回一个字符串,这个字符串就是正则替换的内容

举例:把175升高减10用正则替换函数实现

import re
string='我喜欢升高为175的女孩'
def fn(a):
    # print(a) #这个是正则匹配到的对象
    ret=int(a.group(0))
    return str(ret - 10)

pattern=re.compile(r'\d+')
ret=pattern.sub(fn,string)

print(ret)

打印显示:

我喜欢升高为165的女孩
[Finished in 0.1s]

你可能感兴趣的:(2019-06-19正则表达式)