Python3【正则表达式】

一.正则表达式测试网址

http://tool.oschina.net/regex/

网页格式:https://tool.oschina.net/codeformat/html

二.正则表达式常用匹配规则

        

三.Python3的三种匹配

 1.match()方法

  match方法只能从匹配字符的开头进行匹配,不匹配返回None,匹配返回对应的值

"""
1.match()方法会尝试从字符串的起始位置匹配正则表达式:
  如果匹配,就返回匹配成功的结果
  如果不匹配,就返回None

"""
import re

content = "Hello 123 4567 World_This is a Regex Demo"

result = re.match('^Hellosdddsd{4}sw{10}',content)

#输出匹配结果
print(result)

#输出匹配每一组
print(result.group())

#输出匹配的间距定位
print(result.span())
import re

content = "Hello 123 4567 World_This is a Regex Demo"

#匹配模式编译
pattern = re.compile('^Hellosdddsd{4}sw{10}')

result = re.match(pattern,content)

#输出匹配结果
print(result)

#输出匹配每一组
print(result.group())

#输出匹配的间距定位
print(result.span())
另一种写法

2.search()方法

  search可以根据匹配模式,查找匹配的一个,而不是多个,匹配到返回结果,匹配不到返回空

"""
1.上面的match方法是从头开始匹配,不匹配就会失败
   match适合检测某个字符串是否符合某个正则表达式的规则
2.search可以匹配一组的值

"""
import re

html ='''
<div id="songs-list">
  <h2 class="title">经典老歌</h2>
  <p class="introduction">经典老歌列表</p>
  <ul id="list" class="list-group">
     <li data-view="2">天山</li>
     <li data-view="7">
         <a href="hello.mp3" singer="任贤齐">你好</a>
     </li>
     <li data-view="4">
         <a href="world.mp3" singer="李梦">你的答案</a>
     </li>
     <li data-view="6" class="active">
         <a href="My.mp3" singer="李庚希">答案</a>
     </li>
     <li data-view="5">
         <a href="name.mp3" singer="戚薇">奇迹</a>
     </li>
     <li data-view="5">
         <a href="Justice.mp3" singer="SNH48">九月</a>
     </li>

  </ul>
</div>

'''

#匹配结果
result = re.search('<li.*?active".*?singer="(.*?)">(.*?)</a>',html,re.S)

if result:
    print(result.group(1),result.group(2))
    
import re

html ='''
<div id="songs-list">
  <h2 class="title">经典老歌</h2>
  <p class="introduction">经典老歌列表</p>
  <ul id="list" class="list-group">
     <li data-view="2">天山</li>
     <li data-view="7">
         <a href="hello.mp3" singer="任贤齐">你好</a>
     </li>
     <li data-view="4">
         <a href="world.mp3" singer="李梦">你的答案</a>
     </li>
     <li data-view="6" class="active">
         <a href="My.mp3" singer="李庚希">答案</a>
     </li>
     <li data-view="5">
         <a href="name.mp3" singer="戚薇">奇迹</a>
     </li>
     <li data-view="5">
         <a href="Justice.mp3" singer="SNH48">九月</a>
     </li>

  </ul>
</div>

'''
pattern = re.compile('<li.*?active".*?singer="(.*?)">(.*?)</a>',re.S)

#匹配结果
result = re.search(pattern,html)

if result:
    print(result.group(1),result.group(2))
另一种写法

 

3.findall()方法

"""
1.finall相当于多个search进行匹配,获取所有符合匹配的


"""
import re

html ='''
<div id="songs-list">
  <h2 class="title">经典老歌</h2>
  <p class="introduction">经典老歌列表</p>
  <ul id="list" class="list-group">
     <li data-view="2">天山</li>
     <li data-view="7">
         <a href="hello.mp3" singer="任贤齐">你好</a>
     </li>
     <li data-view="4">
         <a href="world.mp3" singer="李梦">你的答案</a>
     </li>
     <li data-view="6" class="active">
         <a href="My.mp3" singer="李庚希">答案</a>
     </li>
     <li data-view="5">
         <a href="name.mp3" singer="戚薇">奇迹</a>
     </li>
     <li data-view="5">
         <a href="Justice.mp3" singer="SNH48">九月</a>
     </li>

  </ul>
</div>

'''

#匹配结果
result = re.findall('<li.*?singer="(.*?)">(.*?)</a>',html,re.S)

if result:
    print(result)
    
import re


html ='''
<div id="songs-list">
  <h2 class="title">经典老歌</h2>
  <p class="introduction">经典老歌列表</p>
  <ul id="list" class="list-group">
     <li data-view="2">天山</li>
     <li data-view="7">
         <a href="hello.mp3" singer="任贤齐">你好</a>
     </li>
     <li data-view="4">
         <a href="world.mp3" singer="李梦">你的答案</a>
     </li>
     <li data-view="6" class="active">
         <a href="My.mp3" singer="李庚希">答案</a>
     </li>
     <li data-view="5">
         <a href="name.mp3" singer="戚薇">奇迹</a>
     </li>
     <li data-view="5">
         <a href="Justice.mp3" singer="SNH48">九月</a>
     </li>

  </ul>
</div>

'''
pattern = re.compile('<li.*?singer="(.*?)">(.*?)</a>',re.S)

#匹配结果
result = re.findall(pattern,html)

if result:
    print(result)
    
另一种写法

四.贪婪模式和非贪婪模式

   贪婪模式就是在使用匹配符号(.*)的时候,会匹配更多的内容

   非贪婪模式就是在匹配符号(.*?),减少最多匹配,防止缺失

五.Python3的修饰符

 

六.一些常用匹配解析库

   正则表达式

   XPath

   BeautifulSoup

   pyquery

原文地址:https://www.cnblogs.com/Crown-V/p/12652632.html