正则表达式的两种应用场景:
a. 判断用户的输入是否符合规范
b. 爬虫数据的提取
re.match(正则表达式,需要处理的字符串)
In [18]: re.match(r"hello",“helloworld”)
Out[18]: <_sre.SRE_Match object; span=(0, 5), match=‘hello’>
In [19]: re.match(r"hello",“Helloworld”) # 没有返回值,表示没有匹配到内容
In [20]: re.match(r"[hH]ello",“Helloworld”)
Out[20]: <_sre.SRE_Match object; span=(0, 5), match=‘Hello’>
匹配单个字符:
\d 0-9
\s 空白字符
\w 0-9 a-z A-Z _ 语言
. 匹配任意字符,除了换行符\n
匹配多个字符:
{}
+
*
?
eg: 匹配电话号码
In [26]: re.match(r"\d{3}-?\d{8}|\d{4}-?\d{7}",“02145617895”).group()
Out[26]: ‘02145617895’
In [27]: re.match(r"\d{3}-?\d{8}|\d{4}-?\d{7}",“0214-5617895”).group()
Out[27]: ‘0214-5617895’
eg: . 特殊符号的使用
In [33]: re.match(".*",html_str,re.S).group()
Out[33]: ‘sdsdsaa\ndsadsa\nd\nsad\nadsas\ndgfsgsadf\n\ndfs\nasdfdas’
练习1: 匹配变量名是否符合标准规范
“”"
match 默认从开头开始判断,且只匹配第一个匹配到的字符串
match 不判断结尾,即不能保证后面的部分是否以…结尾
\w 匹配的是 a-z A-Z 0-9 _ 语言
从头到尾判断 : ^ 开头 $ 结尾
“”"
import re
names = [‘name1’, ‘_name’, ‘2_name’, ‘name’, “h3###hello”,“a!!hei”]
def main():
for name in names:
# ret = re.match("[a-zA-Z_]+\w*",name)
ret = re.match(r"1[a-zA-Z0-9_]*$", name)
if ret:
print(name," ---- " ,ret.group())
else:
continue
if name == ‘main’:
main()
练习2: 匹配邮箱地址
练习3: 分组练习 + \1 的结合使用
In [49]: html_str
Out[49]: ‘
sahdisuahdiahd adf\n收发
’In [50]: re.match(r"<(\w*)><(\w*)>(.*?)</\2></\1>",html_str, re.S).group()
Out[50]: ‘
sahdisuahdiahd adf\n收发
’In [51]: re.match(r"<(\w*)><(\w*)>(.*?)</\2></\1>",html_str, re.S).group(1)
Out[51]: ‘body’
In [52]: re.match(r"<(\w*)><(\w*)>(.*?)</\2></\1>",html_str, re.S).group(2)
Out[52]: ‘h1’
In [53]: re.match(r"<(\w*)><(\w*)>(.*?)</\2></\1>",html_str, re.S).group(3)
Out[53]: ‘sahdisuahdiahd adf\n收发’
In [55]: re.match(r"<(\w*)><(\w*)>(.*?)</\2></\1>",html_str, re.S).groups()
Out[55]: (‘body’, ‘h1’, ‘sahdisuahdiahd adf\n收发’)
re模块的高级用法
- re.search(r"^…",str) # 等价于 re.match()
- re.sub(正则,替换的字符串,字符串) 默认“全部替换”
注:re.sub 中间的参数可以是 —函数— - re.findall() 返回所有匹配到的所有内容 —列表或者–列表嵌套元组
- re.split(r"? ", “info:xiaozhang 33 shanghai”)
练习:re.sub
#coding=utf-8
import re
def add(temp):
strNum = temp.group()
num = int(strNum) + 1
return str(num)
ret = re.sub(r"\d+", add, “python = 997”)
print(ret)
ret = re.sub(r"\d+", add, “python = 99”)
print(ret)
a-zA-Z_ ↩︎