[python]正则表达式

#coding=utf-8

#Version:python 3.6.0

#Tools:Pycharm 2017.3.2

 

import re

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

# print(len(content))

# 开头的^是匹配字符串的开头,也就是以 Hello 开头;然后\s匹配空白字符,用来匹配目标字符串的空格;\d匹配数字,3个\d匹配 123;然后再写1个\s匹配空格;后面还有 4567 ,我们其实可以依然用4个\d来匹配,但是这么写比较烦琐,所以后面可以跟{4}以代表匹配前面的规则4次,也就是匹配 4 个数字;然后后面再紧接 l 个空白字符,最后\w{10}匹配 10 个字母及下划线.

result = re.match('^Hello\s\d\d\d\s\d{4}\s\w{5}', content)

# print(result)

print(result.group())

print(result.span())

 

# 可以使用()括号将想提取的子字符串括起来.()实际上标记了一个子表达式的开始和结束位置,被标记的每个子表达式会依次对应每一个分组.调用group()方法传入分组的索引即可获取提取的结果.

result = re.match('Hello\s(\d+)\sWorld', content)

print(result)

print(result.group())

print(result.group(1))

 

 

# 其中.(点)可以匹配任意字符(除换行符),*(星)代表匹配前面的字符无限次,所以它们组合在一起就可以匹配任意字符了

result = re.match('^Hello.*Demo$', content)

 

# 贪婪与非贪婪

# (.*)贪婪匹配是尽可能匹配多的字符,(.*?)非贪婪匹配就是尽可能匹配少的字符,而交给后面的\d去匹配,如果匹配的结果在字符串结尾,.*?就有可能匹配不到任何内容了,因为它会匹配尽可能少的字符

 

# 当遇到换行符时,.*?的就不能匹配了,所以导致匹配失败.这里只需加一个修饰符 re.S ,即可修正这个错误:

result1 = re.match('^Hello.*?(\d+).*?Demo$', content, re.S)

 

# 当遇到用于正则匹配模式的特殊字符时,在前面加反斜线转义一下即可

# content ='(百度)www.baidu.com'

# result = re.match('\(百度\)www\.baidu\.com', content)

 

# match()方法是从字符串的开头开始匹配的,一旦开头不匹配,那么整个匹配就失败了

#方法search(),它在匹配时会扫描整个字符串,然后返回第一个成功匹配的结果.也就是说,正则表达式可以是字符串的一部分,在匹配时,search()方法会依次扫描字符串,直到找到第一个符合规则的字符串,然后返回匹配内容,

# 把match()换成search()就好了

# search()只返回匹配到的第一个内容,findall()可返回全部

 

# sub()

# 第一个参数传入\d+来匹配所有的数字,第二个参数为替换成的字符串(如果去掉该参数的话,可以赋值为空),第三个参数是原字符串.

content = '54aKS4yrsoiRS4ixSL2g'

content = re.sub('\d+', '', content)

print(content)

#运行结果: aKyroiRixlg

# 在适当的时候,借助sub()方法可以起到事半功倍的效果

 

# compile()

# 这个方法可以将正则字符串编译成正则表达式对象,以便在后面的匹配中复用

import re

contentl = '2016 12 15 12:00'

content2 = '2016-12-17 12:55'

pattern = re.compile('\d{2}:\d{2}')

resultl = re.sub(pattern, '', contentl)

result2 = re.sub(pattern, '', content2)

print(result1, result2)

# compile()还可以传入修饰符,例如re.S等修饰符,这样在search(),findall()等方法中就不需要额外传了

明天抽空码一下多线程爬虫

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值