match(),向它传入要匹配的字符串以及正则表达式,就能够检测这个正则表达式是否匹配字符串正则表达式
match()方法会尝试从字符串的起始位置匹配正则表达式,若是匹配,就返回匹配成功的结果;若是不匹配,就返回Nonespa
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) print(result.group()) print(result.span())
在match()方法中,第一个参数传入正则表达式,第二个参数传入要匹配的字符串code
group()方法能够输出匹配到的内容,span()方法能够输出匹配的范围即匹配到的字符串再原字符串中的位置范围对象
import re content = 'Hello 1234567 World_This is a Regex Demo' print(len(content)) result=re.match('^Hello\s(\d+)\sWorld',content) print(result) print(result.group(1)) print(result.span())
这若是想把字符串中的1234567提取出来,此时能够将数字部分的正则表达式用()括起来,而后调用group(1)获取匹配结果;若是正则表达式后面还有()包括的内容,那么能够依次用group(2),blog
group(3)来获取索引
import re content = 'Hello 1234567 World_This is a Regex Demo' result=re.match("^He.*(\d+).*Demo$",content) print(result) print(result.group(1))
这里group(1)获得的是数字7,这是贪婪匹配的缘由;在贪婪匹配下,.*会匹配尽量多的字符。正则表达式中.*后面是\d+,即至少一个数字,并无指定多少数字,所以.*就尽量匹配多的字符ci
非贪婪匹配的写法是.*?,即尽量匹配少的字符,若是匹配的结果在字符串结尾,.*?就有可能匹配不到任何内容字符串
由于.匹配的是除换行符以外的任意字符,遇到换行符时.*?就不能匹配了,只须要加一个re.S修饰符便可,该修饰符的做用是使.匹配包括换行符在内的全部字符串io
如下是一些修饰符的做用:编译
修饰符 | 描述 |
re.I | 使匹配对大小写不敏感 |
re.L | 作本地化识别(local-aware)匹配 |
re.M | 多行匹配,影响^和$ |
re.S | 使.匹配包括换行在内的全部字符串 |
re.U | 根据Unicode字符集解析字符,这个标志影响\w,\W,\b和\B |
re.X | 该标志经过给予你更灵活的格式以便你将正则表达式写的更易于理解 |
当遇到用于正则匹配模式的特殊字符时,在前面加反斜线转义一下便可
import re content='(百度)www.baidu.com' result=re.match('\(百度\)www\.baidu\.com',content) print(result)
search()在匹配时会扫描整个字符串,而后返回第一个成功匹配的结果。,也就是说,正则表达式能够是字符串的一部分,在匹配时,search()方法会依次扫描字符串,直到找到第一个符合规则的字符串。返回返回匹配内容,若是搜索完成尚未找到,就返回None
import re content='hhhhhh Hello 1234567 World_This is a Regex Demo hhhh' result=re.search('Hello.*?(\d+).*?Demo',content) print(result)
search()方法能够返回匹配正则表达式的第一个内容,若是想要匹配正则表达式的全部内容,就要借助findall()方法
该方法会搜索整个字符串,而后返回匹配正则表达式的全部内容,返回的列表结果能够用索引来依次取出
除了使用正则表达式提取信息外,有时候还须要借助它来修改文本
import re content='65deng1we2n0xion31g' content=re.sub('\d+','',content) print(content)
sub()给第一个参数传入\d+来匹配全部数字,第二个参数为替换成的字符串(如去掉该参数的话,能够赋值为空),第三个参数为原字符串
这个方法能够将正则字符串编译成正则表达式对象,以便在后面的匹配中复用
import re content1='2019-1-1 1:00' content2='2019-1-2 2:00' content3='2019-1-3 3:00' pattern=re.compile('\d{1}:\d{2}') result1=re.sub(pattern,'',content1) result2=re.sub(pattern,'',content2) result3=re.sub(pattern,'',content3) print(result1,result2,result3)
compile()还能够传入修饰符,该方法能够说是给正则表达式作了一层封装,以便更好的复用