3.系统模块中-re

2018-08-15  本文已影响10人  芝麻酱的简书

元字符:. ^ $ * + ? {} [] | () \ 11个符号的使用


①通配符.

除了换行符,其他都可以匹配到

import re

str1 = "abcedafeafasdfaeaxdefae2134wsfdasedf32af"
# 匹配 "a**e"格式的字长为4的字符串
result = re.findall("a..e",str1)
print(result)


②以什么开头^
str1 = "abcedafeafasdfaeaxdefae2134wsfdasedf32af"
# 匹配以a开头格式为a**e的字符串
result = re.findall("^a..e",str1)


③以什么结尾$
# 匹配以a**e为结尾的字符串
result = re.findall("a..e$", str1)


④转义符\

demo1:使用r来表示raw字符串,不让python解释器转义,直接将正则表达式交给re模块

result1 = re.findall(r"c\\e", "abc\efrwt")
print(result1)

demo2:使用多个\来解决python解释器转义

# 两个反斜杠,会被解释器转义成一个,四个反斜杠就转义成2个交给re模块
result1 = re.findall("c\\\\e", "abc\efrwt")
print(result1)



⑤匹配重复 - 四种* + ? {}
  1. * 重复匹配前一个字符 0到无穷次 --- 贪婪匹配
str1 = "ddddadbaddddd"
result = re.findall("^d*", str1)
  1. + 重复匹配前一个字符 1到无穷次 --- 贪婪匹配

demo:

str1 = "bihaha"
result1 = re.findall("bil*", str1)
result2 = re.findall("bil+", str1)
print(result1)
print(result2)
# 打印结果
# ['bi']
# []
  1. ?匹配前一个字符 0次或者1次 --- 贪婪匹配
str1 = "billhaha"
result1 = re.findall('bi?', str1)
  1. {}自定义重复次数 --- 贪婪匹配
    {0,} 代表0到无穷次
    {0,1} 代表0到1次
    {6} 代表重复6次
    所以{}可以代替前三种重复符号
str1 = "billhaha"
result1 = re.findall('bil{4}', str1)
注意:

在上面四种重复匹配符后面加?,可以使其由 贪婪匹配 变为 惰性匹配

str1 = "billhaha"
result1 = re.findall('bil+?', str1)


⑥字符集[]
#匹配由a*b组成的字符串
result1 = re.findall('a[zxc]b', 'azbacv')

在字符集[]符号中,只有- ^ \三种符号有特殊意义,其他元字符按照普通字符来匹配:

  1. []中使用-,用来表示范围
    [a-z]
    [A-Z]
    [0-9]
    按照ASCII码来寻找范围
result1 = re.findall('a[a-z]b', 'azb')
result1 = re.findall('a[a-z]*', 'azbasdfasdfa3')
# 结果是['azbasdfasdfa']

  1. []中使用^,表示非
result1 = re.findall('a[^a-z]', 'azbasdfasdfa3')
# 输出结果[a3]
  1. []使用\表示转义符


⑦管道符|

代表 或者 的意思

result1 = re.findall(r"123a|b", "adf123abc")
# 结果是 ['123a', 'b']


⑧小括号()

分组

result1 = re.findall(r"(123)+", "adf123333abc")
# 结果['123']




上一篇下一篇

猜你喜欢

热点阅读