python re模块

发布时间 2023-07-18 09:14:21作者: 子琳&me

1. 单字符

  • .表示除了\n外的任意一个字符
  • \d为数字, \D反之
  • \s表示空白字符, \S反之
  • \w表示字母,数字,下划线, \W反之

2. 字符集

  • []里面是单个字符进行匹配, 如果需要的话要好几个[]才行

3. 转义字符

  • \

4. 数量规则

  • *表示任意个字符
  • +表示至少一个
  • ?表示0或者1个
  • 使用{}规定范围, 可以类似{3,5},注意不能有空格

5. 边界处理

  • ^表示限制开头, 注意不能用[]
  • $限制结尾的字符
  • \b表示字符的边界,只有空格才行, \B相反

示例1

import re


str = 'abc'
match_result = re.match("abc", str) # match是从开头开始匹配的, 这样结果是None
find_result = re.findall("c", str) # 可以不从头开始,结果是一个列表


# .的使用
# .表示除了\n之外的任意一个字符, 字母,数字,标点这些都可以用.表示

str = "abc,.-d"
result1 = re.findall(".", str) # ['a', 'b', 'c', ',', '.', '-', 'd']


# \d 表示单个数字
str = "abc12-="
result2 = re.findall("\d", str) # ['1', '2']


# \D 表示非数字
str = "abc12-=()你好"
result2 = re.findall("\D", str) # ['a', 'b', 'c', '-', '=', '(', ')', '你', '好']



# \s表示空白字符, 换行等格式符也是空白符
str = "ab\n0 8" 
result = re.findall("\s", str) # ['\n', ' ']

# \S表示非空白字符
str = "ab\n0 8" 
result = re.findall("\S", str) # ['a', 'b', '0', '8']

# \w 字母, 数字, 下划线, 这些常见的可用的
str = "Aa09_-=1"
result = re.findall("\w", str) # ['A', 'a', '0', '9', '_', '1']

# \W 非字母, 数字, 下划线
str = "Aa09_-=1"
result = re.findall("\W", str) # ['-', '=']

示例2

import re

#[]本质上还是单个字符的寻找
str  = "aa1bb1c1d4ge"
# 把符合单字符条件的字符找出来
result = re.findall('[abcde]', str) # ['a', 'a', 'b', 'b', 'c', 'd', 'e']

# 常见的满足顺序的字符可以用-表明范围
str = "aa1bb1c1d4ge"
result = re.findall('[a-e]', str) # ['a', 'a', 'b', 'b', 'c', 'd', 'e']

str = "098701230"
result = re.findall('[0-7]', str)  # ['0', '7', '0', '1', '2', '3', '0']


# ^是取反符号, 取反并不局限与此类型
str  = "aa1bb1c1d4ge"
result = re.findall('[^abcde]', str) # ['1', '1', '1', '4', 'g']
# 注意如果不用[]括起来, 代表的是以什么开头
str  = "aa1bb1c1d4ge"
result = re.findall("^aa1\w+",str) # ['aa1bb1c1d4ge']


# 可以把字符连起来, 注意[]是寻找单字符的, 所以要想寻找多个需要好几个[]
str  = "aa1AFGbb1c1d4ge"
result = re.findall('[aa1AFGbb1]', str) # ['a', 'a', '1', 'A', 'F', 'G', 'b', 'b', '1', 'c', '1', 'd', '4', 'g', 'e']
result = re.findall('aa1AFGbb1', str)  # ['aa1AFGbb1']
result = re.findall('[a-z][0-9]',str) # ['a1', 'b1', 'c1', 'd4']
result = re.findall('\w[a-z][0-9]',str) # ['aa1', 'bb1', '1d4']

示例3

# 转义字符的好玩之处
# 这是因为\d python默认按路径来处理需要解析的字符串\d, 这样的话其实是表示为\\d了
str = "\d"
result = re.findall("\d",str) # []
result = re.findall("\\d",str) # []
result = re.findall("\\\d",str) # ['\\d']
result = re.findall("\\\\d",str) # ['\\d']

str = "\n"
result = re.findall("\\n",str) # ['\n']
result = re.findall("\\\n",str) # ['\n']

示例4

import re


# *表示任意个字符, 包括0, 所以实际中用+效果更好
str = "123456dad155"
result = re.findall("[\d]*", str) # ['123456', '', '', '', '155', '']
result = re.findall("\d*", str) # ['123456', '', '', '', '155', '']


# +表示至少一个字符
str = "123456dad155"
result1 = re.findall("[\d]+", str) # ['123456', '155']
result2 = re.findall("\d+", str) # ['123456', '155']

# ?表示0或者1个字符
str = "123456dad155"
result1 = re.findall("[\d]?", str) # ['1', '2', '3', '4', '5', '6', '', '', '', '1', '5', '5', ''] 
result2 = re.findall("\d?", str) # ['1', '2', '3', '4', '5', '6', '', '', '', '1', '5', '5', ''] 


# {n} , {m, n}表示出现数量
str = "123456dad155" 
result1 = re.findall("\d{3}", str) # ['123', '456', '155']

示例代码5

import re

# ^表示限定开始的字符, 注意不带[],否则成了取反了
str = "a12c45b" 
result1 = re.findall("^a\d{2}",str) # ['a12']
result2 = re.findall("^c\d{2}",str) # [], 开头不是c, 所以没有

# 使用$限定结束的字符
str = "0123458"
result = re.findall("\d{2}8$",str) # ['458']
result = re.findall("\d{2}5$",str) # []


# 使用\b表示字符的边界, 必须空格才行, \B反之
str = "abd abdag 3bd bda"
# str = "abd.1"  这个无法识别
result = re.findall('bd\\b', str) # 注意这里转义字符的使用, 这里表示用bd结尾的
result = re.findall('\\bbd', str) # 这里表示以bd开头的
result = re.findall('\\Bbd', str) # 这里表示不是以bd开头的