Python3 Re正则表达式

    xiaoxiao2023-11-12  152

    对正则表达式的运用总是不熟练, 每次要写正则的时候,总是傻傻分不清 * . ?+()区别了。

    这次特意系统学习,并做个笔记吧

    一、正则表达式的常用操作符 

    操作符说明栗子.表示任意单个字符 [ ]字符集,对单个字符给出取值范围[abc]: 表示a或b或c;   [a-z]: 表示a到z[^ ]非字符集,对单个字符给出排除范围[^abc]: 表示非a或b或c单的单个字符*表示*号前一个字符0次或无限次扩展(最小0次, 最大无限次)abc*: 表示ab、abc、abcc、abccc+表示+号的前一个字符1次或无限次扩展(最小至少1次, 最大无限次)abc+: 表示abc、abcc、abccc、abcccc?表示?前一个字符可以是0次或1次扩展(只能是0次 或 最多1次)abc?: 表示ab、abc|左右任意表达式1个abc|def: 表示 abc 或 def{m}扩展前一个字符m次abc{2}:  表示abcc{m, n}扩展前一个字符m次到n次abc{1, 3}: 表示abc 、abcc、 abccc^匹配字符串开头 $匹配字符串结尾 ()分组标记, 多组时内部只能用|操作符(abc)表示abc; (abc|efg): 表示abc或efg\w单词字符,等价[a-zA-Z0-9] \W用于匹配所有与\w不匹配的字符 \d数字, 等价于[0-9] \s空格 

    \S

    非空格 [\u4e00-\u9fa5]匹配中文字符 

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    二、Row string类型

    如:正则表达式  ^\d+$, 用row string类型表示,为re = r'^\d+$'; 但是如果用string类型表示,需要对\进行转义,为re = r'^\\d+$';

    由此可见,当正则表达式中包含转义符时,建议使用row string类型表示更方便。

    三、Re库6个主要功能函数

    re.search() 、re.match()、re.findall()、re.split()、re.finditer()、re.sub()

    import re # search 可以匹配到, 结果:111901 (注意:只会返回一个匹配结果,如果希望返回所有匹配结果, 需要使用finditer 或 findall) search = re.search(r'[1-9]\d{5}', 'BAT 111901 IUC333777') if search: print(search.group(0)) # match # match = re.match(r'[1-9]\d{5}', 'BAT 111901') 从头开始匹配,所以匹配不到 # 可以匹配到了, 结果:111901 match = re.match(r'[1-9]\d{5}', '111901 BAT') if match: print(search.group(0)) else: print("匹配不到") # findall 结果:['111901', '888999'] list = re.findall(r'[1-9]\d{5}', '111901 BAT 888999') if list: print(list) else: print("匹配不到") # split 结果:['', ' BAT ', ''] s = re.split(r'[1-9]\d{5}', '111901 BAT 888999') if s: print(s) else: print("匹配不到") # finditer: 返回的是迭代类型, 结果111901、888999 for fi in re.finditer(r'[1-9]\d{5}', '111901 BAT 888999'): if fi: print(fi.group(0)) # sub 满足正则条件的部分,都被给定的内容替换. 结果:啊哈 BAT 啊哈 sb = re.sub(r'[1-9]\d{5}', '啊哈', '111901 BAT 888999') print(sb)

    以上这些函数, 还可以先通过re.compile(pattern) 对正则表达式先编译, 然后使用编译后的正则对象调用这些方法,这种方式因为是一次编译,多次使用, 效率更高。

     

    最新回复(0)