正则表达式测试工具:http://tool.oschina.net/regex#
实例1:match()
import re
content = 'Hello 123 4567 World_This is a Regex Demo'
print(len(content))
result = re.match('^Hello\s\d\d\d\s\d{4}\s\w{10}',content)
print(type(result))
print(result.group()) #输出匹配到的内容
print(result.span()) #输出匹配的方法
结果:
注意:如果re.macth()匹配不成功,print(type(result))的结果会是<class 'NoneType'>。 之后的print也会出错。
实例2:匹配目标。可以使用()括号将想提取的子字符串括起来。
import re
import re
content = 'Hello 123 4567 World_This is a Regex Demo'
print(len(content))
result = re.match('^Hello\s(\d\d\d)\s(\d{4})\s\w{10}',content)
print(result.group())
print(result.group(0))
print(result.group(1)) #提取第1个括号中的匹配结果 “123”
print(result.group(2)) #提取第2个括号中的匹配结果 “4567”
print(result.span())
结果:
注意:result.group(0)中存放的是整个匹配结果!
实例3:贪婪匹配和非贪婪匹配
import re
content = 'Hello 123 4567 World_This is a Regex Demo'
result1 = re.match('^He.*(\d+).*Demo$',content) #“.*”贪婪匹配,会匹配尽可能多的字符
print(result1)
print(result1.group(1))
result2 = re.match('^He.*?(\d+).*Demo$',content) #“.*?”非贪婪匹配,会匹配尽可能少的字符
print(result2)
print(result2.group(1))
结果:
注意:非贪婪放结尾可能匹配不到任何内容:
import re
content = 'http://www.baidu.com/comment/lic'
result1 = re.match('http.*comment/.*',content)
result2 = re.match('http.*comment/.*?',content)
print(result1.group())
print(result2.group())
实例4:match()与search()
match()方法是从字符串的开头开始匹配,一旦开头不匹配则匹配失败,更适合用来检测某个字符串是否符合某个正则表达式规则。search()方法在匹配时扫描整个字符串,然后返回第一个成功匹配的结果。
import re
content = 'Extra string Hello 1234567 World xixixi oyo'
result1 = re.match('Hello.*?(\d+).*?xixixi',content)
result2 = re.search('Hello.*?(\d+).*?xixixi',content)
print(result1)
print(result2)
结果:
实例5:findall()获取匹配正则式的所有内容。
sub()修改文本。接受3个参数(a,b,c):a为匹配对象,b为替换字符串,c为原字符串。
compile()将正则字符串编译成正则表达式对象
import re
content1 = "<a href = '/2.mp3' singer = '啊哈'>哼哼哈嘿</a>" \
"<a href = '/3.mp3' singer = '笑笑'>嘤嘤呀呀</a>"
content2 = "asad32432<asd>dasd</sad>222"
res1 = re.findall('^<a.*a>$',content1,re.S)
print(res1)
res2 = re.sub('<a.*?>|</a>','',content1)
print(res2)
content3 = '2018-10-16 11:21'
pattern = re.compile('\d{2}:\d{2}')
res3 = re.sub(pattern,'',content3)
print(res3)
结果: