python search和match的区别是什么?

python search和match的区别是什么?,第1张

import re
str = '谢谢您,关注我:阿P的哲学';
result = re.match('阿P的哲学', str)#rp:match
print(result)
result2 = re.match('谢谢您', str)#rp:match
print(result2)
result3 = re.search('阿P的哲学', str)#rp:search
print(result3)
result4 = re.search('谢谢您', str)#rp:search
print(result4)
result5 = re.search('谢谢您啊', str)#rp:search
print(result5)

输出:

None



None

和match差不多用法,从字符串中进行搜索

import re
print(re.search(r'test','123test123test'))
# 
print(re.findall(r'test','123test123test'))  #以列表的方式返回
#与上面的显示结果不同已经给出了说明是以表表的方式返回的
# ['test', 'test']
findall

从字面意思上就可以看到,findall是寻找所有能匹配到的字符,并以列表的方式返回

import re
print(re.match(r'\d\d','123test123test'))
#
print(re.search(r'\d\d','123test123test'))
#
re.s

findall中另外一个属性re.S

在字符串a中,包含换行符\n,在这种情况下

  • 如果不使用re.S参数,则只在每一行内进行匹配,如果一行没有,就换下一行重新开始。
  • 而使用re.S参数以后,正则表达式会将这个字符串作为一个整体,在整体中进行匹配。

 如下要寻找test.*123的数据,因为test和123在不同的行,如果没加re.s的话,他会在每一个进行匹配查找而不是将字符串作为一个整体进行查找

import re
a = """aaatestaa
aaaa123"""#1:在字符串a中,包含换行符\n
#2:a = """aaatestaa后面注意不要有空格(因为粘贴过来的原因),不然输出结果会不一样
print(re.findall(r'test.*123',a))
#[] 显示结果为空,因为没有找到,它找的是下面这个内容
print(re.findall(r'test.*123',a,re.S))
#['testaa\naaaa123']
sub

查找字符串中所有相匹配的数据进行替换

sub(要替换的数据,替换成什么,要替换的数据所在的数据)#RP:这样写通俗易懂啊

import re
print(re.sub('php','python','php是世界上最好的语言——php'))
#输出 "python是世界上最好的语言——python"
split

对字符串进行分割,并返回一个列表

import re
s = "itcase,java:php-php3;html"
print(re.split(r",",s))           #以,号进行分割
#['itcase', 'java:php-php3;html']
print(re.split(r",|:|-|;",s))     #以,或者:或者-或者;进行分割
# ['itcase', 'java', 'php', 'php3', 'html']
print(re.split(r",|:|-|%",s))    #找不到的分隔符就忽略
# ['itcase', 'java', 'php', 'php3;html']

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/884794.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-14
下一篇2022-05-14

发表评论

登录后才能评论

评论列表(0条)

    保存