正则表达式
又称规则表达式,通常用于检索、替换那些符合某个规则的文本 python中由re模块提供有了全部的正则表达式功能
这里用一段字符串来作为示例
import re
message = 'python is the best language in the world'
re.match是从字符串的起始位置去匹配,第一个参数是正则,第二个参数是需要匹配的字符串
result = re.match('p',message)
print(result.group())
例如这里,改成匹配’t’则会报错,但可以改成’python’,也可以匹配成功 group()是来用来获取匹配成功的字符串,例如上面的语句会输出p
另,默认情况下如这样的情况是会对大小写敏感的,如用P来则会报错 当然,我们可以增加标志位以使得规则发生变化
我们可以在match的最后添加一些标志位规则: 如: re.I:使得对大小写不敏感 re.M:多行匹配,影响 ^ 和 $ re.I:做本地化识别(locale-aware)匹配 re.S:使 . 匹配包括换行在内的所有字符 re.U:根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B re.X:该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解
result1 = re.match('P',message,re.I)
当然我们也可同时存在多个条件,如下面这样写:
result2 = re.match('P',message,re.I|re.M)
group(num)可以获取匹配的数据,如果有多个匹配结果的话会以元组的形式存放到group对象中 groups()是返回这整个元组
result3 = re.match('(.*) is (.*?) .*',message,re.I)
'''
这里的正则表示is前和is后的内容,故如匹配成功,会将匹配的结构python和the存入元组中
那么此时的group(1)就是python,group(2)就是the
而如果使用groups(),就会返回一个包含python和the的元组
'''
print(result3)
print(result3.group(1))
print(result3.group(2))
print(result3.groups())
输出结果:
python
the
('python', 'the')
另外,re模块还有一些匹配规则:
常见的匹配规则-匹配字符: . :匹配任意一个字符除了换行符\n [abc] :匹配abc中的任意一个字符(一个中括号只能匹配一个字符) \d :匹配一个0-9的数字 \D :匹配非数字 \s :匹配空白,即空格键、tab键 \S :匹配非空白,即除了空格键、tab键 \w :匹配单词字符,即a-z、A-Z、0-9、_ \W :匹配非单词字符
如:
message1 = '李淳罡'
result4 = re.match('李..',message1)
print(result4.group())
常用的匹配规则-匹配字符数量: *:匹配前一个字符出现0次或者无限次,即可有可无 +:匹配前一个字符出现1次或者无限次,即至少1次(不能匹配数字开头,中间还是可以) ?:匹配前一个字符出现1次或者0次,即至多1次 {m}:匹配前一个字符出现m次 {m,}:匹配前一个字符至少出现m次 {m,n}:匹配前一个字符出现从m到n次
如:
message2 = 'Any'
message3 = 'Afjsihgiesgsnoiaafjhf'
result5 = re.match('[A-Z][A-Z]*',message2)
result6 = re.match('[A-Z][a-z]*',message2)
result7 = re.match('[A-Z][a-z]*',message3)
print(result5.group())
print(result6.group())
print(result7.group())
'''
这个地方的原本意思是:两个[]表示如果在内容限定的范围内就可以匹配到
而在第二个[]后面加了*,即表示这个字符的数量可以是0-无穷
那么result5因为Any的第二个字符往后都是小写,不在限定的范围内,则是匹配0次(不符合要求也不会报错)
result6乃至于result7呢,限定的条件改成了小写,而因为Any第二个字符往后都是小写,都满足要求,那么它一直匹配下去
'''
顺便一提,如果想匹配大小写都可以的话,也可以这样写:[a-zA-Z] 输出结果:
A
Any
Afjsihgiesgsnoiaafjhf
|