首页 > 代码库 > Python学习(三)

Python学习(三)

一、正则表达式

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。正则表达式有两部分参数,一个是匹配规则pattern,另一个是待匹配的数据源,data_source,用正则表达式时需要导入模块re,import re

import re
m = re.match(abc,abcdef) # 其中abc为pattern,abcdef为data_source,re.match(pattern,data_source)方法,
                              # 从data_source的左边开头进行匹配,若匹配上返回一个对象并且停止匹配,即只能匹配一次,匹配不上返回None
print(m)
if m:
    print(m.group()) # obj.group()方法,查看匹配到的内容

<_sre.SRE_Match object; span=(0, 3), match=‘abc‘>
abc

但以上的方法pattern写的固定,只能匹配abc不够灵活,且只能匹配一次

import re
m1 = re.findall([0-9]{0,10},146567abc576def) # 其中[0-9]{0,10}为pattern,[0-9]代表匹配的为0-9的数字,
                                                  # {0,10}代表前面定义的类型可以为相同的0-10个进行匹配,可以写一个数字代表确定的个数进行匹配
                                                  # 146567abc576def为data_source,re.match(pattern,data_source)方法,
                                                  # 把data_source的符合匹配规则的子字符全部匹配出来返回一个列表,
                                                  # {0,10}存在0,则返回的列表会出现空的,一般是从1开始,例如{1,10}
m2 = re.findall([0-9]{1,10},146567abc576def)
m3 = re.findall([a-zA-Z]{1,10},146567abc576def) # [a-zA-Z]代表匹配为所有字母,大小写均可
m4 = re.findall(.*,146567abc576def) # 其中.代表可以匹配换行符以外的所有字符,*代表0到多个,功能类似{0,10}
m5 = re.findall(.+,146567abc576def) # 其中+代表1到多个,功能类似于{1,10}
m6 = re.search(\d+,146567abc576def) # re.search()方法,从data_source的左边开头进行匹配,直到找到一个符合的结果然后结束,
                                          # 或者找遍data_source都没有发现结束,其中\d代表匹配任意数字,类似[0-9],
                                          # \D代表匹配任意非数字,\s代表匹配任意空白字符,\S代表匹配任意非空字符,
                                          # \w匹配字母数字,\W匹配非字母数字
m7 = re.search(^\d+,146567abc576def) # 其中^代表从data_source的第一个字符开始就要求符合匹配规则,否则找不到NoneType,
                                           # $代表从data_source的最后一个字符要符合匹配规则
m8 = re.sub(\d+,-,146567abc576def) # re.sub(pattern,str,data_source,count= )方法,从data_source的左边开始,
                                           # 把匹配到的子字符串替换为设定的str,count=num可以指定替换的个数,默认全部替换
if m1 or m2 or m3 or m4 or m5 or m6 or m7 or m8:
    # print(m.group())  # re.findall没有obj.group()方法,直接使用print(obj)查看匹配到的内容
    print(m1)
    print(m2)
    print(m3)
    print(m4)
    print(m5)
    print(m6.group()) # 查看re.search()中匹配到的子字符串
    print(m7.group())
    print(m8)

[‘146567‘, ‘‘, ‘‘, ‘‘, ‘576‘, ‘‘, ‘‘, ‘‘, ‘‘]
[‘146567‘, ‘576‘]
[‘abc‘, ‘def‘]
[‘146567abc576def‘, ‘‘]
[‘146567abc576def‘]
146567
146567
-abc-def

 

Python学习(三)