文章目录

  • 1、简介
  • 2、具体实现
  • 2.1 一个一个字符的匹配
  • 2.2 可以匹配多个连续的
  • 2.3 可python 贪婪 非贪婪
  • 2.4 * + ? 多次匹配


1、简介

我们会简单介绍 匹配字符串中常见的 元字符,比如数字 、英文 大小写、特殊符号、空白字符等

2、具体实现
2.1 一个一个字符的匹配
import re

string = "@#%&^*()=+\.!;'}a2u5_Z\r\t \n"
#匹配字符串中所有 数字字符
match = re.findall("\d",string)
print(match)
#['2', '5']

#匹配字符串所有   非数字字符
match = re.findall("\D",string)
print(match)
#['@', '#', '%', '&', '^', '*', '(', ')', '=', '+', '\\', '.', '!', ';', "'", '}', 'a', 'u', '_', 'Z', '\r', '\t', ' ', '\n']

#匹配包括下划线的  单词字符 A-Z a-z 0-9
match = re.findall("\w",string)
print(match)
#['a', '2', 'u', '5', '_', 'Z']

#匹配一个     非下划线的单词字符
match = re.findall("\W",string)
print(match)
#['@', '#', '%', '&', '^', '*', '(', ')', '=', '+', '\\', '.', '!', ';', "'", '}', '\r', '\t', ' ', '\n']

#匹配一个     空白字符
match = re.findall("\s",string)
print(match)
#['\r', '\t', ' ', '\n']

#匹配一个     非空白字符
match = re.findall("\S",string)
print(match)
#['@', '#', '%', '&', '^', '*', '(', ')', '=', '+', '\\', '.', '!', ';', "'", '}', 'a', '2', 'u', '5', '_', 'Z']
2.2 可以匹配多个连续的
import re

string = "a23u557k7890"
#连续取出来面字符 23,557,7890
match = re.findall("\d{1,4}",string)   #{1,4} 代表匹配前面的一个 字符1-4次
print(match)
#['23', '557', '7890']

match = re.findall("\d{1,}",string)   #{1,} 代表匹配前面的一个字符1-N次
print(match)
#['23', '557', '7890']

string = "abcd2abcde3abcdef"
#连续取出来面字符 23,557,7890
match = re.findall("[a-z]{4,6}",string)   #{匹配[a-z] 里的一个字符串 4-6 次
print(match)
#['abcd', 'abcde', 'abcdef']
2.3 可python 贪婪 非贪婪

就是像上面那样,python 在匹配字符的时候,是去最大的,还是取最小的

import  re


string = "abc2abcd2abcde2abcdef"
match = re.findall("[a-z]{3,6}",string )  # {3,6} pyhon 默认取 最大 数字6 进行匹配,就是贪婪
print(match)
#['abc', 'abcd', 'abcde', 'abcdef']


string = "abc2abcd2abcde2abcdef"
match = re.findall("[a-z]{2,6}?",string )  # {2,6}?  这里就是进行最小模式的匹配 即使非贪婪
print(match)
#['ab', 'ab', 'cd', 'ab', 'cd', 'ab', 'cd', 'ef']
2.4 * + ? 多次匹配

" * " = {0,} 会匹配前面一个字符 0 个到 N个
" + " = {1,} 会匹配前面的字符 1 个 到 N 个,至少匹配一个
" ? " = {0,1} 会匹配钱买你的字符 0 个 到1 个

import  re

string = "a0ab2abb3abbbb"

match  = re.findall("ab*",string) # *  表示匹配前一个字符 {0,}  0 个到N 个
print(match)
#['a', 'ab', 'abb', 'abbbb']

match  = re.findall("ab+",string) # +  表示匹配前一个字符 {1,}  1 个到N 个
print(match)
#['ab', 'abb', 'abbbb']

match  = re.findall("ab?",string) # +  表示匹配前一个字符 {0,1}  0 个到1 个
print(match)
#['a', 'ab', 'ab', 'ab']