2018-08-03正则表达式(15)

Python基础语法(15)

正则表达式

complie()

用来将正则表达时编译,之后使用时直接调用,提升速度。
将正则表达式编译为对象模式。(可以提高一点效率)

代码示例:

Import re
regx = r”\d+”
reg = re.complite(regx)

match()

match()方法会从字符串最开始就进行匹配,如果开始匹配,则认为字符串匹配,此时输出group(0)会从开头开始,知道不能匹配位置的字符串都输出。
要想完全匹配字符串,可以在结尾处加上$这样就可以一直匹配到字符串结尾。
代码示例:

str01 = “hello python”  
regx = r”h\w”   
reg = re.complie(regx)
result = reg.match(str01)
print(result)

运行结果:

he
如果没有匹配到,结果为None。

  • 注意,为None的变量不能给其他变量赋值,否则会报错。
    分组模式
    在正则表达式中加入()即可为其分组。
    代码示例:
import re

str01 = "0459-82890000 https://bilibili.com"
regx = r"(\d+)-(\d+)\s*(\w+)://(\w+)\.\w+"
reg = re.compile(regx)
result = reg.match(str01)

print(result.group(0))
print(result.group(1))
print(result.group(2))
print(result.group(3))
print(result.group(4))
print(result.groups())# 会返回元组类型

运行结果为:

0459-82890000 https://bilibili.com
0459
82890000
https
bilibili
('0459', '82890000', 'https', 'bilibili') 《--这里是一个元组


search()

该函数会在字符串中匹配模式,只要找到一个匹配的就会返回,如果没找到会返回None。
代码示例:

import re

regex = re.compile(r'\d+')
str01 = "2018-8-3"
res01 = regex.search(str01)
print(res01.group(0))

运行结果:

2018


findall()

此函数会遍历字符串,找到字符串中所有匹配的字符串,返回一个列表。
简单代码示例:

import re

str01 = "0459-82890000 https://bilibili.com"
regx = r"(\d+)-(\d+)\s*(\w+)://(\w+)\.\w+"
reg = re.compile(regx)
result = reg.findall(str01) # 会返回一个list
print(result)

运行结果:

[('0459', '82890000', 'https', 'bilibili')]
['0459-82890000 https://bilibili.com'] # 去掉分组会返回这个


来试着写一个简单的爬虫吧

import re

regex = re.compile(r'\s*< li >(.+?)< / li >\s+')
str01 = '''
< html lang = "en" >
< head >
< meta charset = "UTF-8" >
< title > Title < / title >
< / head >
< body >
< li > 001 < / li >
< li > 002 < / li >
< li > 003 < / li >
< li > 004 < / li >
< / body >
< / html >
'''
res01 = regex.findall(str01)
print(res01)

运行结果:

[' 001 ', ' 002 ', ' 003 ', ' 004 ']

这个简单的爬虫就是利用正则表达式来描述想要截取的字段,然后对字段进行分许,取出有价值的部分。

sub()

该方法首先来匹配字符串,然后在匹配的位置替换字符串,最后返回替换后的字符串。
代码示例:

import re

regex = re.compile(r'\d+')
str01 = "2018-8-3"
res01 = regex.sub("/",str01)
print(res01)

运行结果:

/-/-/

贪婪与非贪婪匹配

你可能感兴趣的:(2018-08-03正则表达式(15))