python正则怎么写 |
您所在的位置:网站首页 › 负整数正则表达式怎么写 › python正则怎么写 |
\d+ \d? \d+? \d*? 这个几个的区别: +是贪婪的,什么都要,而且临近成为一组 ?是由0,1构成,所以不存在也会输出空 +?就是不贪婪的取值,把匹配的结果按字符输出 *? 输出所有空值 Python 正则表达式入门(初级篇) 本文主要为没有使用正则表达式经验的新手入门所写。 转载请写明出处 引子 首先说 正则表达式是什么? 正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。 许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。 引用自维基百科https://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F 定义是定义,太正经了就没法用了。我们来举个栗子:假如你在写一个爬虫,你得到了 一个网页的HTML源码。其中有一段 hello world你想要把这个hello world提取出来,但你这时如果只会python 的字符串处理,那么第一反应可能是 s = hello worldstart_index = s.find(' ')然后从这个位置向下查找到下一个 出现这样做未尝不可,但是很麻烦不是吗。需要考虑多个标签,一不留神就多匹配到东西了,而如果想要非常准确的匹配到,又得多加循环判断,效率太低。这时候,正则表达式就是首选的帮手。 干货开始 入门级别 接着说我们刚才那个例子。我们如果拿正则处理这个表达式要怎么做呢? import re key = r" hello world "#这段是你要匹配的文本p1 = r"(?" pattern1 = re.compile(p1) print pattern1.findall(key) 输出 ['hello'] 我们既然有了范围性的匹配,自然有范围性的排除。 [^]代表除了内部包含的字符以外都能匹配 还是cat,hat,mat,qat这个例子,我们想匹配除了qat以外的,那么就应该这么写: import re key = r"mat cat hat pat" p1 = r"[^p]at"#这代表除了p以外都匹配 pattern1 = re.compile(p1) print pattern1.findall(key) 输出 为了方便我们写简洁的正则表达式,它本身还提供下面这样的写法 正则表达式代表的匹配字符 [0-9] 0123456789任意之一 [a-z] 小写字母任意之一 [A-Z] 大写字母任意之一 \d 等同于[0-9] \D 等同于[^0-9]匹配非数字 \w 等同于[a-z0-9A-Z_]匹配大小写字母、数字和下划线 \W 等同于[^a-z0-9A-Z_]等同于上一条取非 3.介绍到这里,我们可能已经掌握了大致的正则表达式的构造方式,但是我们常常会在实战中遇到一些匹配的不准确的问题。比方说: import re key = r"[email protected]" p1 = r"@.+\."#我想匹配到@后面一直到“.”之间的,在这里是hit pattern1 = re.compile(p1) print pattern1.findall(key) 输出结果 ['@hit.edu.'] 呦呵!你咋能多了呢?我理想的结果是@hit.,你咋还给我加量了呢?这是因为正则表达式默认是“贪婪”的,我们之前讲过,“+”代表是字符重复一次或多次。但是我们没有细说这个多次到底是多少次。所以它会尽可能“贪婪”地多给我们匹配字符,在这个例子里也就是匹配到最后一个“.”。 我们怎么解决这种问题呢?只要在“+”后面加一个“?”就好了。 import re key = r"[email protected]" p1 = r"@.+?\."#我想匹配到@后面一直到“.”之间的,在这里是hit pattern1 = re.compile(p1) print pattern1.findall(key) 输出结果 ['@hit.'] 加了一个“?”我们就将贪婪的“+”改成了懒惰的“+”。这对于[abc]+,\w*之类的同样适用。 小测验:上面那个例子可以不使用懒惰匹配,想一种方法得到同样的结果 **个人建议:在你使用"+","*"的时候,一定先想好到底是用贪婪型还是懒惰型,尤其是当你用到范围较大的项目上时,因为很有可能它就多匹配字符回来给你!!!** 为了能够准确的控制重复次数,正则表达式还提供 {a,b}(代表a |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |