Python基础之正则
使用单个字符串来描述匹配一系列符合某个句法规则的字符串,是对字符串操作的一种逻辑公式
使用场景:处理文本和数据
正则表达式过程:依次拿出表达式和文本中的字符比较,如果每
一、概念 使用单个字符串来描述匹配一系列符合某个句法规则的字符串,是对字符串操作的一种逻辑公式 使用场景:处理文本和数据 正则表达式过程:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功,否则匹配失败 二、re模块操作 在Python中需要通过正则表达式对字符串进行匹配的时候,可以使用一个模块,名字为re 1. re模块的使用过程 #coding=utf-8 # 导入re模块 import re # 使用match方法进行匹配操作 result = re.match(正则表达式,要匹配的字符串) # 如果上一步匹配到数据的话,可以使用group方法来提取数据 result.group() 2. re模块示例(匹配以itcast开头的语句) #coding=utf-8 import re result = re.match("itcast","itcast.cn") result.group() 运行结果为: itcast 3. 说明 r的作用 >>> mm = "c:\\a\\b\\c">>> mm'c:\\a\\b\\c'>>> print(mm) c:\a\b\c >>> print(mm) c:\a\b\c >>> re.match("c:\\\\",mm).group()'c:\\'>>> ret = re.match("c:\\\\",mm).group() >>> print(ret) c:\ >>> ret = re.match("c:\\\\a",mm).group() >>> print(ret) c:\a >>> ret = re.match(r"c:\\a",mm).group() >>> print(ret) c:\a >>> ret = re.match(r"c:\a",mm).group() Traceback (most recent call last): File "", line 1, in AttributeError:'NoneType' object has no attribute 'group'>>> 说明 Python中字符串前面加上 r 表示原生字符串, 与大多数编程语言相同,正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。 Python里的原生字符串很好地解决了这个问题,有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。 >>> ret = re.match(r"c:\\a",mm).group() >>> print(ret) c:\a 三、正则表达式的语法 1.匹配单个字符 字符匹配.匹配任意字符(除了\n)[...]匹配字符集\d\D匹配数字非数字\s\S匹配空白非空白\w\W匹配单词字符[a-zA-Z0-9]非单词字符 例子 # coding=utf-8 import re #匹配中括号MySQL 正则表达式,需要加斜杠 result = re.match(r'\[[\w]\]','[a]') group = result.group() print(group) 2.匹配多个字符 字符匹配*匹配前一个字符出现0次或者无限次,即可有可无+匹配前一个字符出现1次或者无限次,即只有有1次?匹配前一个字符出现1次或者0次,即要么有1次, 要么没有{m}匹配前一个字符出现m次{m,n}匹配前一个字符出现从m到n次*?/+?/??匹配模式变为非贪婪(尽可能少匹配字符) #coding=utf-8 import re ret = re.match("[A-Z][a-z]*","Mm") ret.group()Mm ret = re.match("[A-Z][a-z]*","Aabcdef") ret.group()Aabcdef result = re.match(r'[A-Z][a-z]*','AAdshgds') group = result.group()A 3.匹配开头结尾 字符功能^匹配字符串开头$匹配字符串结尾 4.匹配分组 字符功能|匹配左右任意一个表达式(ab)将括号中字符作为一个分组\num引用分组num匹配到的字符串(?P)分组起别名(?P=name)引用别名为name分组匹配到的字符串 四、re模块的高级用法 search 需求:匹配出文章阅读的次数 #coding=utf-8 import re ret = re.search(r"\d+", "阅读次数为 9999") ret.group() findall 需求:统计出python、c、c++相应文章阅读的次数 #coding=utf-8 import re ret = re.findall(r"\d+", "python = 9999, c = 7890, c++ = 12345") print ret sub 将匹配到的数据进行替换 需求:将匹配到的阅读次数加1 方法1: #coding=utf-8 import re ret = re.sub(r"\d+", '998', "python = 997") print ret 方法2: #coding=utf-8 import re def add(temp): strNum = temp.group() num = int(strNum) + 1 return str(num) ret = re.sub(r"\d+", add, "python = 997") print ret ret = re.sub(r"\d+", add, "python = 99") print ret 从下面的字符串中取出文本 岗位职责: 完成推荐算法、数据统计、接口、后台等服务器端相关工作 必备要求: 良好的自我驱动力和职业素养,工作积极主动、结果导向 技术要求: 1、一年以上 Python 开发经验,掌握面向对象分析和设计,了解设计模式 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |