content = 'Hello 123 4567 World_This is a Regex Demo' print(len(content)) result = re.match('^Hello\s\d\d\d\s\d{4}.*Demo$',content) print(result) print(result.group()) print(result.span())
1 2 3 4 5 6 7 8 9
#泛匹配 import re
content = 'Hello 123 4567 World_This is a Regex Demo' print(len(content)) result = re.match('^Hello.*Demo$',content) print(result) print(result.group()) print(result.span())
1 2 3 4 5 6 7 8 9 10 11 12
#匹配目标 import re
content = 'Hello 1234567 World_This is a Regex Demo' print(len(content)) #可以使用()括号将想提取的子字符串括起来。()实际上标记了一个子表达式的开始和结束位置,被标记的每个子表达式会依次对应每一个分组,调用group()方法传入分组的索引即可获取提取的结果。 result = re.match('^Hello\s(\d+)\sWorld.*Demo$',content) print(result) print(result.group()) print(result.group(1)) # 将第一括号括起来的内容打印出来,依次可推group(2) print(result.span()) print(result.groups())
1 2 3 4 5 6 7 8 9
#贪婪匹配 import re
content = 'Hello 1234567 World_This is a Regex Demo' print(len(content)) result = re.match('^Hel.*(\d+).*Demo$',content) print(result) print(result.group(1)) #在贪婪匹配下,.*会匹配尽可能多的字符。正则表达式中.*后面\d+至少一个数字,但并没有指定具体多少个数字,因此,.*就尽可能匹配多的字符,这里就把123456匹配了,给\d+留下一个可满足条件的数字7。
1 2 3 4 5 6 7 8
#非贪婪匹配 content = 'Hello 1234567 World_This is a Regex Demo' print(len(content)) result = re.match('Hel.*?(\d+).*Demo$',content) #非贪婪匹配的写法是.*? print(result) print(result.group(1)) #非贪婪匹配就是尽可能匹配少的字符。当.*?匹配到Hello后面的空白字符时,再往后的字符就是数字了,而\d+恰好可以匹配,那么这里.*?就不再进行匹配,交给\d+去匹配后面的数字。 #这里需要注意,如果匹配的结果在字符串结尾,.*?就有可能匹配不到任何内容了,因为它会匹配尽可能少的字符。需要用贪婪匹配.*
1 2 3 4 5 6 7 8 9
#匹配模式(修饰符) import re
content = '''Hello 1234567 World_This is a Regex Demo''' result = re.match('He.*?(\d+).*?Demo$',content) #.匹配的是除换行符之外的任意字符,当遇到换行符时,.*?就不能匹配了 print(result) result1 = re.match('He.*?(\d+).*?Demo$',content,re.S) # 只需加一个修饰符re.S,使.匹配包括换行在内的所有字符 print(result1)
1 2 3 4 5 6 7 8
#转义匹配 import re
content = 'prince is $5.00' result = re.match('prince is $5.00',content) print(result) result1 = re.match('prince is \$5\.00',content) #遇到用于正则匹配模式的特殊字符时,在前面加反斜线转义一下 print(result1)
import re content = 'Extra stings Hello 1234567 World_This is a Regex Demo Extra stings' result = re.match('Hello.*?(\d+).*?Demo', content) print(result) result1 = re.search('Hello.*?(\d+).*?Demo', content) print(result1)
results = re.findall('<li.*?href="/(.*?)".*?singer="(.*?)">(.*?)</a>',html,re.S) print(results) print(type(results)) for result in results: print(result[0],result[1],result[2]) results1 = re.findall('<li.*?>\s*?(</a.*?>)?(\w+)(</a>)?\s*?</li>',html,re.S) print(results1) for result1 in results1: print(result1[1])
8、re.sub
替换字符串中每一个匹配的字符串后返回替换后的字符串。
re.sub(正则表达式,要替换成的字符串,原字符串)
1 2 3 4 5 6 7 8 9 10 11 12
import re
content = 'Extra stings Hello 1234567 World_This is a Regex Demo Extra stings'
result = re.sub('\d+','',content) #去掉数字 print(result)
html = re.sub('<a.*?>|</a>','',html) #首先去掉a标签 print(html) results = re.findall('<li.*?>(.*?)</li>',html,re.S) #然后再查找所有歌名 print(results) for result in results: print(result.strip())
9、re.compile
将正则字符串编译成正则表达式对象,以便在后面的匹配中复用。
1 2 3 4 5 6 7 8 9 10
import re
content = '''Hello 1234545 World_This is a Regex Demo'''