TypechoJoeTheme

安逸

统计
登录
用户名
密码

re.findall 用法

2021-12-15
/
0 评论
/
825 阅读
/
正在检测是否收录...
12/15

re.findall 用法

正则 re.findall 的简单用法(返回string中所有与pattern相匹配的全部字串,返回形式为数组)
语法:
findall(pattern, string, flags=0)

import re
Python 正则表达式 re findall 方法能够以列表的形式返回能匹配的子串

# print (help(re.findall))
# print (dir(re.findall))

str = 'aabbabaabbaa'

一个 . 就 是匹配除 \n (换行符)以外的任意一个字符

print(re.findall(r'a.b',str))
#['aab', 'aab']

符号 * 前面的字符出现0次或以上

print(re.findall(r'a*b',str))
#['aab', 'b', 'ab', 'aab', 'b']

符号.* ,匹配从.前面为开始到后面为结束的所有内容

print(re.findall(r'a.*b',str))
#['aabbabaabb']

符号.*? ,遇到开始和结束就进行截取,因此截取多次符合的结果,中间没有字符也会被截取

print(re.findall(r'a.*?b',str))
#['aab', 'ab', 'aab']

符号(.*?) ,与上面一样,只是与上面的相比多了一个括号,只保留括号的内容

print(re.findall(r'a(.*?)b',str))
#['a', '', 'a']

关于带括号与不带括号的区别

    string="abcdefg  acbdgef  abcdgfe  cadbgfe"

#不带括号

    regex=re.compile("((\w+)\s+\w+)")
    print(regex.findall(string))
    #输出:[('abcdefg  acbdgef', 'abcdefg'), ('abcdgfe  cadbgfe', 'abcdgfe')]
    
    regex1=re.compile("(\w+)\s+\w+")
    print(regex1.findall(string))
    #输出:['abcdefg', 'abcdgfe']
    
    regex2=re.compile("\w+\s+\w+")
    print(regex2.findall(string))
    #输出:['abcdefg  acbdgef', 'abcdgfe  cadbgfe']

findall查找全部r标识代表后面是正则的语句

regular_v1 = re.findall(r"docs","https://docs.python.org/3/whatsnew/3.6.html")
print (regular_v1)
# ['docs']

符号^表示匹配以https开头的的字符串返回,

regular_v2 = re.findall(r"^https","https://docs.python.org/3/whatsnew/3.6.html")
print (regular_v2)
# ['https']

  

用$符号表示以html结尾的字符串返回,判断是否字符串结束的字符串

regular_v3 = re.findall(r"html$","https://docs.python.org/3/whatsnew/3.6.html")
print (regular_v3)
# ['html']

[...]匹配括号中的其中一个字符

regular_v4 = re.findall(r"[t,w]h","https://docs.python.org/3/whatsnew/3.6.html")
print (regular_v4)
# ['th', 'wh']

“d”是正则语法规则用来匹配0到9之间的数返回列表

regular_v5 = re.findall(r"\d","https://docs.python.org/3/whatsnew/3.6.html")
regular_v6 = re.findall(r"\d\d\d","https://docs.python.org/3/whatsnew/3.6.html/1234")
print (regular_v5)
# ['3', '3', '6']
print (regular_v6)
# ['123']

小d表示取数字0-9,大D表示不要数字,也就是出了数字以外的内容返回

regular_v7 = re.findall(r"\D","https://docs.python.org/3/whatsnew/3.6.html")
print (regular_v7)
# ['h', 't', 't', 'p', 's', ':', '/', '/', 'd', 'o', 'c', 's', '.', 'p', 'y', 't', 'h', 'o', 'n', '.', 'o', 'r', 'g', '/', '/', 'w', 'h', 'a', 't', 's', 'n', 'e', 'w', '/', '.', '.', 'h', 't', 'm', 'l']

“w”在正则里面代表匹配从小写a到z,大写A到Z,数字0到9

regular_v8 = re.findall(r"\w","https://docs.python.org/3/whatsnew/3.6.html")
print (regular_v8)
#['h', 't', 't', 'p', 's', 'd', 'o', 'c', 's', 'p', 'y', 't', 'h', 'o', 'n', 'o', 'r', 'g', '3', 'w', 'h', 'a', 't', 's', 'n', 'e', 'w', '3', '6', 'h', 't', 'm', 'l']

“W”在正则里面代表匹配除了字母与数字以外的特殊符号

regular_v9 = re.findall(r"\W","https://docs.python.org/3/whatsnew/3.6.html")
print (regular_v9)
# [':', '/', '/', '.', '.', '/', '/', '/', '.', '.']

re.findall中参数re.S的意义
1.字符串变为(后面多加了2个b)

str = '''aabbab
         aabbaa
         bb'''

2.参数无re.S,没有把最后一个换行的aab算进来

print(re.findall(r'a.*?b',str))
#['aab', 'ab', 'aab']

3.参数有re.S,不会对\n进行中断

print(re.findall(r'a.*?b',str,re.S))
#['aab', 'ab', 'aab', 'aa\n         b']




赞(0)
版权属于:

安逸

本文链接:

https://www.anyi.men/index.php/archives/23/(转载时请注明本文出处及文章链接)

评论 (0)
本篇文章评论功能已关闭