2019-06-19正则表达式

2019-06-19  本文已影响0人  hcc_9bf4

为什么引入正则表达式?

import re
string='<p><div><span>猪八戒</span></div></p>'
pattern=re.compile(r'<(\w+)><(\w+)>\w+</\2></\1>')
ret=pattern.search(string)
print(ret)

显示:

<re.Match object; span=(3, 30), match='<div><span>猪八戒</span></div>'>
[Finished in 0.1s]
import re
string='<div>如来佛祖</div></div></div>'
pattern=re.compile(r'<div>.*</div>')

ret=pattern.search(string)

print(ret)

匹配显示:

match='<div>如来佛祖</div></div></div>'>

加?后

import re
string='<div>如来佛祖</div></div></div>'
pattern=re.compile(r'<div>.*?</div>')

ret=pattern.search(string)

print(ret)

匹配显示:

match='<div>如来佛祖</div>'>
  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='''<div>沁园春-雪
北国风光
千里冰封
万里雪飘
望长城内外
惟余莽莽
大河上下
顿失滔滔
山舞银蛇
原驰蜡像
欲与天公试比高
</div>'''

pattern=re.compile(r'<div>(.*?)</div>',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'<div>(.*?)</div>',re.S)

换成:

pattern=re.compile(r'<div>(\w+)</div>',re.S)

匹配失败:

[]
[Finished in 0.1s]

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

pattern=re.compile(r'<div>(.*?)</div>',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]
上一篇 下一篇

猜你喜欢

热点阅读