原生字符串
Python中字符串前加上r表示原生字符串 ,与大多数编程语言相同,正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。
假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\":前两个和后两个分别⽤于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。
Python的原生字符串很好地解决了这个问题,有了原始字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
import re
str1 = "http:\\a:\\\\b"
print(str1)
ret = re.match(r"http:\\a", str1)
print(ret.group())
输出
http:\a:\\b
http:\a
实例:匹配\n
import re
content = """line1
kjhl
hknoii
dmwinds"""
ret1 = re.match(r".*", content).group()
ret2 = re.match(r".*", content, re.S).group()
print(ret1)
print("------------")
print(ret2)
输出
line1
------------
line1
kjhl
hknoii
dmwinds
实例:验证一个163邮箱的合法性
import re
def main():
email = input("请输入一个邮箱地址:")
ret = re.match(r"^[a-zA-Z0-9_]{4,20}@163\.com$",email)
if ret:
print("%s为合法的邮箱"%email)
else:
print("%s为不合法的邮箱"%email)
if __name__ == "__main__":
main()
实例:验证一个163或126邮箱的合法性
import re
def main():
email = input("请输入一个邮箱地址:")
ret = re.match(r"^[a-zA-Z0-9_]{4,20}@(163|126)\.com$",email)
if ret:
print("%s为合法的邮箱"%email)
else:
print("%s为不合法的邮箱"%email)
if __name__ == "__main__":
main()
实例:分组
import re
html_str = "<h1>hello</h1>"
ret = re.match(r"<(\w*)>(.*)</(\w*)>", html_str).group(2)
print(ret)
输出
hello
实例:分组
import re
html_str = "<h1>hello</h1>"
ret = re.match(r"(<\w*>).*(\1)", html_str).group()
print(ret)
输出
<h1>hello</h1>
实例:分组
import re
html_str = "<h1><div>hello</div></h1>"
ret = re.match(r"(<\w*>)(<\w*>).*(\2)(\1)", html_str).group()
print(ret)
输出
<h1><div>hello</div></h1>
实例:分组
import re
html_str = "<h1><div>hello</div></h1>"
ret = re.match(r"<(?P<n1>\w*)><(?P<n2>\w*)>.*</(?P=n2)></(?P=n1)>", html_str).group(2)
print(ret)
输出
<h1><div>hello</div></h1>
re的高级用法
search
import re
ret = re.search(r"\d+", "阅读次数为 999")
print(ret.group())
输出
999
findall
import re
ret = re.findall(r"\d+", "阅读次数为 999, 点赞数为 66")
print(ret)
输出
['999', '66']
sub 将匹配到的数据进⾏替换
import re
def add(temp):
ret = temp.group()
ret = int(ret) + 1
return str(ret)
ret = re.sub(r"\d+", add, "python = 999")
print(ret)
ret = re.sub(r"\d+", add, "python = 98")
print(ret)
输出
python = 1000
python = 99
实例
import re
html_str = """<dd class="job_bt">
<h3 class="description">职位描述:</h3>
<div class="job-detail">
工作职责
<br>负责无人驾驶系统中,视觉感知算法方面的研发工作
<br>
<br>职位要求 (具有以下两项以上)
<br>1. 具有良好的深度学习基础,熟悉CNN网络,熟练掌握Caffe/Tensorflow/Pytorch中的一种或以上
<br>2. 精通视觉目标检测、图像分割领域算法,具有实际应用的模型调优经验
<br>3. 扎实的编程基础,熟练掌握C++,Python,熟悉OpenCV,CUDA编程
<br>4. 在无人驾驶领域有视觉研发经验的优先考虑
<br>
<br>加分项:
<br>5. 在计算机视觉/机器学习顶会CVPR,ICCV,ECCV,AAAI, NIPS等以一作发表过文章
<br>6. 作为主要成员参加视觉竞赛并取得较好成绩
</div>
</dd>"""
def rep(temp):
oldstr = temp.group()
oldstr = ""
return oldstr
ret = re.sub(r'<.*class=".*">|<\w*>|</\w*>', rep, html_str)
print(ret)
输出
职位描述:
工作职责
负责无人驾驶系统中,视觉感知算法方面的研发工作
职位要求 (具有以下两项以上)
1. 具有良好的深度学习基础,熟悉CNN网络,熟练掌握Caffe/Tensorflow/Pytorch中的一种或以上
2. 精通视觉目标检测、图像分割领域算法,具有实际应用的模型调优经验
3. 扎实的编程基础,熟练掌握C++,Python,熟悉OpenCV,CUDA编程
4. 在无人驾驶领域有视觉研发经验的优先考虑
加分项:
5. 在计算机视觉/机器学习顶会CVPR,ICCV,ECCV,AAAI, NIPS等以一作发表过文章
6. 作为主要成员参加视觉竞赛并取得较好成绩