python中正则表达式

正则表达式是一种通用的字符串匹配技术,是不会因为编程语言不一样而发生变化的

如果想查找对应规则的字符串,就可以用正则表达式
python中要使用正则表达式需使用re模块,它是正则表达式在python中的封装

1.匹配的方式:match、search、findall

1.1 match 表示: 从开始的位置进行匹配,即从第一个字符开始匹配,第一个没有匹配到,则整个就不会匹配到
# 匹配特定的字符串  "abc"
import re


re_pattern = r'abc'#写匹配规则式时,要加上转意字符r
res = re.match(re_pattern, "abwofowpqfowfjowefjiwoefabcowof")
# 从 "wofowpqfowfjowefjiwoefabcowof" 这个字符串当中匹配是否 有 re_pattern
# match 表示: 从开始的位置进行匹配,即从第一个字符开始匹配,第一个没有匹配到,则整个就不会匹配到
print(res)

 1.2search  全文匹配,如果表达式有多处可以匹配到,只会返回第一个匹配到的结果

# search, 全文匹配,如果表达式有多处可以匹配到,只会返回第一个匹配到的结果
res = re.search(re_pattern, "abcwofowpqfowfjowefjiwoefabcowof")
print(res)

 

1.3findall 全部匹配,如果表达式有多处可以匹配到,结果也会返回多个

# findall, 全部匹配,如果表达式有多处可以匹配到,结果也会返回多个
res = re.findall(re_pattern, "abcwofowpqfowfjowefjiwoefabcowof")
print(res)

  

2.语法

2.1 [abc] 匹配中括号中的任意一个字符

# [abc], 匹配中括号中的任意一个字符
re_pattern = r'[abc]',
res = re.findall(re_pattern, "abcwofowpqfowfjowefjiwoefabcowof")
print(res)

2.2  .匹配任意一个字符串 除了 \n

# . 匹配任意一个字符
re_pattern = r'.',
res = re.findall(re_pattern, "abcwofowpqfowfjowefjiwoefabcowof")
print(res)

  

2.3 \d 匹配数字,相当于[0-9]

# \d  匹配数字 data,相当于[0-9]
re_pattern = r'\d'
res = re.findall(re_pattern, "a123bcwofowpqfowfjowefjiwoefabcowof")
print(res)

  

2.4 \D 匹配非数字

# \D  匹配非数字 data
re_pattern = r'\D'
res = re.findall(re_pattern, "a@123bcwofowpqfowfjowefjiwoefabcowof")
print(res)

  

2.5 \w 匹配字母、数字、下划线 相当于[A-Za-z0-9_]

# \w  匹配字母,数字,下划线
re_pattern = r'\w'
res = re.findall(re_pattern, "a@_123bcwofowpqfowfjowefjiwoefabcowof")
print(res)

 2.6 \W 反向的, 非匹配字母,数字,下划线

 

2.7{}匹配花括号当中次数,一般要和其他的规则配合使用

# 匹配花括号当中的数字次,  匹配几次,
re_pattern = r'\d{2}'
res = re.findall(re_pattern, "aa@_123b&cwofowpqfowfjowefjiwoefabcowof")
print(res)

  

2.8 {2, } 匹配至少 2 次

#  {2, } 匹配至少 2 次
# TODO: 正则表达式当中,千万不要手残,空格不能随便打
# 贪婪模式, python 当中
re_pattern = r'\w{2,}'
res = re.findall(re_pattern, "aa@_123b&cwofowpqfowfjowefjiwoefabcowof")
print(res)

  

2.9  {,2} 匹配最多 2 次

# {,2} 匹配最多 2 次
re_pattern = r'\w{,2}'
res = re.findall(re_pattern, "aa@_123b&cwofowpqfowfjowefjiwoefabcowof")
print(res)

  

2.10 {2,4} 匹配 2 -4 次,最少匹配2,最多匹配4次

# {2,4} 匹配 2 -4 次,最少匹配2,最多匹配4次
re_pattern = r'\w{2,4}'
res = re.findall(re_pattern, "aa@_123b&cwofowpqfowfjowefjiwoefabcowof")
print(res)

  

 

例子:匹配手机号码

# 如何去匹配一个手机号码
# re_pattern = r'1[35789]\d{9}'
# res = re.findall(re_pattern, "aa@_123b&cwo17520208510fowpqfowfjowefjiwoefabcowof")
# print(res)

  

2.11 *匹配0次或者任意次,通配符

# # * 匹配 0 次或者任意次, 通配符,
# re_pattern = r'\d*'
# res = re.findall(re_pattern, "aa@_123b&cwo17520208510fowpqfowfjowefjiwoefabcowof")
# print(res)

  

 

2.12 + 匹配1次或者任意次数,通配符

# +  匹配 1 次或者任意次, 通配符,
# re_pattern = r'\d+'
# res = re.findall(re_pattern, "aa@_123b&cwo17520208510fowpqfowfjowefjiwoefabcowof")
# print(res)

  

2.13 ? 匹配 0 次或者 1 次,非贪婪模式

# ? 匹配 0 次或者 1 次
re_pattern = r'\d?'
res = re.findall(re_pattern, "aa@_123b&cwo17520208510fowpqfowfjowefjiwoefabcowof")
print(res)

  

2.14 ^开头

# ^ 开头
re_pattern = r'^\d'
res = re.findall(re_pattern, "1aa@_123b&cwo17520208510fowpqfowfjowefjiwoefabcowof")
print(res)

  

2.15 $结尾

# # $结尾
# re_pattern = r'\d*$'
# res = re.findall(re_pattern, "jiwoefabcowof3434")
# print(res)

 

2.16组,findall中是用括号表示

search中用.group()表示

# # 组,如果你要匹配的内容,显示出来不包含首位的字符,可以加上括号
re_pattern = r'#(.*?)#'
res = re.findall(re_pattern, mystr)
print(res)

  

3.替换 re.sub()

# # 替换 re.sub() 替换操作(正则表达式,替换成的字符串,被替换的字符串)
# mystr = re.sub(re_pattern, 'me123', mystr, 1)

  

 

  

 

 




posted @ 2020-04-24 10:38  learn_py_test  阅读(250)  评论(0编辑  收藏  举报