本文共 1610 字,大约阅读时间需要 5 分钟。
正则表达式: 导入模块 import re re.match(正则表达式,要匹配的字符串) match方法从左到右匹配,有个不一样就结束方法 若字符串匹配正则表达式,则match方法返回匹配对象(Match Object), 否则返回None(注意不是空字符串"") 匹配对象Macth Object具有group方法,用来返回字符串的匹配部分 表示字符 . 匹配任意1个字符(除了\n) [ ] 匹配[ ]中列举的字符 [23456]匹配2,3,4,5,6 [^23456]不是23456 [a-z5-9]匹配a到z,5到9 \d 匹配数字,即0-9 ===[0-9] \D 匹配非数字,即不是数字 ====[^0-9] \s 匹配空白,即 空格,tab键 \S 匹配非空白 \w 匹配单词字符,即a-z、A-Z、0-9、_ ===[a-zA-Z0-9] \W 匹配非单词字符 表示数量 * 匹配前一个字符出现0次或者无限次,即可有可无 /d*表示出现0次或多次数字 + 匹配前一个字符出现1次或者无限次,即至少有1次 ? 匹配前一个字符出现1次或者0次,即要么有1次,要么没有 {m} 匹配前一个字符出现m次 {m,} 匹配前一个字符至少出现m次 {m,n} 匹配前一个字符出现从m到n次 原始字符串 Python中字符串前面加上 r 表示原生字符串 正则中加个r表示原生字符串 例 re.match(r"\\\","\\\")匹配三个\ 表示边界 ^ 匹配字符串开头 ^a:以a开头 $ 匹配字符串结尾 a$:以a结尾 例:手机号正则:r"1[3578]\d{9}$ \b 匹配一个单词的边界 单词边界就是单词和符号之间的边界 这里的单词可以是中文字符,英文字符,数字; 符号可以是中文符号,英文符号,空格,制表符,换行 \B 匹配非单词边界 匹配分组 | 匹配左右任意一个表达式 例 匹配0-100 :r"[1-9]?\d?$|100$" (ab) 将括号中字符作为一个分组 常与group(1)或者groups()[0]使用 \num 引用分组num匹配到的字符串 常与(ab)使用 \2就是第二个()里面的内容 (?P<name>) 分组起别名 (?P=name) 引用别名为name分组匹配到的字符串 search:查询字符串中匹配的正则表达式的内容,从左到右,查询到后就停止 findall:查询字符串中所有符合正则表达式的内容 sub 将匹配到的数据进行替换 替换的可以是函数 re.sub(r"\d+", '998', "python = 997") def replace(result): s=int(result.group())+50 return str(s) re.sub(r"\d+",replace, "python = 997") split 根据匹配进行切割字符串,并返回一个列表 ret = re.split(r":| ","info:xiaoZhang 33 shandong") print ret ret=['info','xiaoZhang','33','shandong'] Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符; 非贪婪则相反,总是尝试匹配尽可能少的字符。 在"*","?","+","{m,n}"后面加上?,使贪婪变成非贪婪。 练习: http://www.interoem.com/messageinfo.asp?id=35替换成http://www.interoem.com/ 解: s="http://www.interoem.com/messageinfo.asp?id=35" result = s.sub(r"(http://.+?/).*" ,lambda x : x.group(1),s)转载地址:http://gxobi.baihongyu.com/