(记录学习第1天)
正则表达式英语:regex
Python中所有正则表达式的函数都在re模块中,记得先写上(后面的代码块省略了)
import re
函数介绍:
向re.compile()传入一个字符串值,表示正则表达式
search()方法:查找传入的字符串,以寻找该正则表达式的所有匹配
group()方法:返回被查找字符串中实际匹配的文本
下面是几方面的举例:
1、利用括号分组
phoneNumberRegex1 = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')
m1 = phoneNumberRegex1.search('my phone number is 123-456-7890')
print('phone number found:'+m1.group())
#输出的是phone number found:123-456-7890
phoneNumberRegex2 = re.compile(r'(\d\d\d)-(\d\d\d-\d\d\d\d)')#分成两组
m2 = phoneNumberRegex2.search('my phone number is 123-456-7890')
print(m2.group(0)) #输出的是123-456-7890
print(m2.group(1)) #输出的是123
print(m2.group(2)) #输出的是456-7890
phoneNumberRegex3 = re.compile(r'(\(\+\d\d\)) (\d\d\d \d\d\d \d\d\d\d)')#分成两组
m3 = phoneNumberRegex3.search('my phone number is (+86) 138 000 0831')#该电话号码取自郭德纲的相声
print(m3.group()) #输出的是(+86) 138 000 0831,括号里写0或1都一样的结果
print(m3.group(1)) #输出的是(+86)
print(m3.group(2)) #输出的是138 000 0831
如果要检测以下这些字符的文本模式,包括:. ^ $ * + ? { } [ ] \ | ( )
需要用斜杠对它们进行转义。
2、用管道匹配多个分组
batMobile = re.compile(r'Bat(man|mobile|copter)')
m4 = batMobile.search('Batmobile lost a wheel')
print(m4.group(0))#输出Batmobile
print(m4.group(1))#输出mobile
3、用问号实现可选匹配
phoneRegex1 = re.compile(r'(\d\d\d-)?\d\d\d-\d\d\d\d')
m5 = phoneRegex1.search('123-456-1234')
m6 = phoneRegex1.search('456-1234')
print(m5.group())#输出123-456-1234
print(m6.group())#输出456-1234
4、用星号匹配零次或多次
phoneRegex2 = re.compile(r'奥(利)*奥')
m7 = phoneRegex2.search('奥奥')
m8 = phoneRegex2.search('奥利利利利利利奥')
print(m7.group())#输出奥奥
print(m8.group())#输出奥利利利利利利奥
5、用加号匹配一次或多次
phoneRegex3 = re.compile(r'奥(利)+奥')
m9 = phoneRegex3.search('奥利奥')
m10 = phoneRegex3.search('奥利利利利利利奥')
print(m9.group()) #输出奥利奥
print(m10.group()) #输出奥利利利利利利奥
6、用花括号匹配特定次数
phoneRegex4 = re.compile(r'(HA){2}')
m9 = phoneRegex4.search('HAHA')
print(m9.group()) #输出HAHA
phoneRegex4 = re.compile(r'(HA){3,}')#大于等于三次
m10 = phoneRegex4.search('HAHAHA')
print(m10.group()) #HAHAHA
7、不区分大小写的匹配
robot = re.compile(r'robot',re.I)
m11 = robot.search('ROboT')
print(m11.group())#输出ROboT