文章目录
- 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']