python正则

正则

孤街浪徒 提交于 2019-11-29 00:44:54
正则表达式 正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同。 流程: 正则表达式的大致匹配过程是:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。 如果表达式中有量词或边界,这个过程会稍微有一些不同。 语法表 1.2. 数量词的贪婪模式与非贪婪模式 正则表达式通常用于在文本中查找匹配的字符串。Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;非贪婪的则相反,总是尝试匹配尽可能少的字符。例如:正则表达式"ab*"如果用于查找"abbbc",将找到"abbb"。而如果使用非贪婪的数量词"ab*?",将找到"a"。 1.3. 反斜杠的困扰 与大多数编程语言相同,正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠

ETL必知必会----正则

我是研究僧i 提交于 2019-11-29 00:39:30
ETL简介 ETL(Extraction-Transformation-Loading)中文意思就是数据清洗(数据抽取、转换和加载),通俗的说法就是从数据源抽取数据出来,进行清洗加工转换,然后加载到定义好的数据仓库模型中去。目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。 ETL是BI项目重要的一个环节,其设计的好坏影响生成数据的质量,直接关系到BI项目的成败。这个处理过程有很多方法,包括清洗工具的使用,以及HQL自带的函数,自定义udf函数,正则表达式等,其中正则表达式使用的非常之多,功能也十分强大. 什么是正则表达式及其功能 正则表达式,又称规则表达式. 正则表达式的英语原文为:Regular Expression,常简写为regex、regexp或RE,正则表达式是计算 机科学的一个概念. 正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本. 刚开始接触正则的人肯定是一头蒙,但实际上正则并不是想象的那么难懂, 像 data(\w)?.dat 这样的正则表达式查找下列名字: 此时我们能找到所有的,如果我们吧 ? 改成 + 则只能匹配到后四个. 例如:该文本有这些内容,我们需要找出文本中的 hello 单词,一般我们都会直接ctrl+f 进行搜索,其实这个搜索的过程就相当于正则的 hello ,当我们只要开头那个hello

Python学习笔记(八)——正则表达式

放肆的年华 提交于 2019-11-28 18:18:19
正则表达式 \d 表示匹配一个数字 例如, 1\d\d 可以匹配以1开头的三位数字 \w 可以匹配一个字母或者数字 例如, \d\w 可以匹配12,1A等 . 可以匹配任意字符 例如, py. 表示pyc、pya等 * 表示任意个字符(包括0个) == {0,} + 表示至少一个字符 == {+,} {n} 表示至少n个字符 {n,m} 表示n-m个字符 \s 表示匹配一个空格 注意:特殊字符要使用 \ 转译 例子,匹配010-12345 正则表达式: \d{3}\-\d{5} 进阶(精确匹配) [] 表示范围 匹配一个字母数字下划线: [0-9a-zA-Z\_] 至少由一个字母数字或者下划线组成的字符串 [0-9a-zA-Z\_]+ python的合法变量(字母或下划线开头) [a-zA-Z\_][0-9a-zA-Z\_]* A|B匹配A或B (P|p)ython可以匹配Python或python ^ 表示行的开始,以数字开头 ^\d 如果 ^ 写到字符集里边表示取反,例如 [^a-z] 表示除字母以外的字符 $ 表示行的结束,以数字结尾 \d$ ? 表示匹配前一个字符0-1个 == {0,1} re模块的使用 re 模块 来源: https://www.cnblogs.com/lelezuimei/p/11419222.html

Python学习日记(十四) 正则表达式和re模块

醉酒当歌 提交于 2019-11-28 08:51:46
正则表达式 : 它是字符串的一种匹配模式,用来处理字符串,可以极大地减轻处理一些复杂字符串的代码量 字符组 : 它是在同一位置可能出现的各种字符组成了一个字符组,用[]表示,但是它的结果只能是一个数字或者一个大写字母或小写字母等 下面测试以该网站为例http://tool.chinaz.com/regex/ #正则表达式 匹配字符串  匹配结果 #[0-9] 9 9 [0-9]的写法就相当于在用[0123456789] #[0123456789] 0 0 #[a-z] 1 None 这里只匹配小写字符a-z而不匹配数字 #[a-z] z z #[A-Z] A A 这里只匹配大写字符串 #[A-Z0-5a-c] A6b A、b 这里的数字范围只有到0-5所以没匹配到6 元字符: 1.'.' 匹配出换行符以外的任意字符 #正则表达式 匹配字符串 匹配结果 # . a a # . 1 1 # . & & # . 换行符 None 2.'\w' 匹配字母或下划线或数字--word 等价于[A-Z0-9a-z_] #正则表达式 匹配字符串 匹配结果 # \w a a # \w 1 1 # \w & None # \w 换行符 None # \w _ _ 3.'\s' 匹配任意的空白符--space 匹配字符串如果什么都不写也会匹配到一个结果,这里的空白符有空格、tab键、回车等空白字符 4.

081 re正则表达式模块

老子叫甜甜 提交于 2019-11-28 08:39:34
目录 一、正则表达式 二、re模块的基本语法 ^ 元字符 $ 元字符 [] 元字符(字符集) [^] 反取 . 任意字符(换行符除外) * 对前一个字符0-无穷次扩展 + 对前一个字符1-无穷次扩展 ? 对前一个字符0或1次扩展 {m} 对前一个字符扩展m次 {m,n} 对前一个字符扩展m-n次(含n) \d 匹配单个数字(0-9) \D 匹配单个非数字(包括\n) \w 匹配 数字/字母/下划线 \W 匹配 非数字/非字母/非下划线 \s 匹配 空格/ \t/ \n \S 匹配 非空格/ 非\t/ 非\m () 只要括号内的 | 左右两边的字符都要 .* 贪婪模式 **.*? 非贪婪模式** 三、re模块中常用功能函数 3.1 正则表达式的两种书写方式 3.2 re.compile(strPattern[, flag])函数 3.2.1 re.S 3.2.2 re.I 3.2.3 re.M 3.2.4 re.sub 3.3 分组函数 3.4 re.match(pattern, string[, flags])函数(常用) 3.5 re.search(pattern, string[, flags])函数 3.6 re.findall(pattern, string[, flags])函数(常用) 3.7 re.split(pattern, string[, maxsplit]

正则表达式

北慕城南 提交于 2019-11-28 04:13:06
转载,出处: https://segmentfault.com/a/1190000009162306 1. 正则表达式 1.1 什么是正则表达式 正则表达式 : 定义一个搜索模式的字符串。 正则表达式可以用于搜索、编辑和操作文本。 正则对文本的分析或修改过程为:首先正则表达式应用的是文本字符串(text/string),它会以定义的模式从左到右匹配文本,每个源字符只匹配一次。 1.2 示例 正则表达式 匹配 this is text 精确匹配字符串 "this is text" this\s+is\s+text 匹配单词 "this" 后跟一个或多个空格字符,后跟词 "is" 后跟一个或多个空格字符,后跟词 "text" ^\d+(\.\d+)? ^ 定义模式必须匹配字符串的开始, d+ 匹配一个或多个数字, ? 表明小括号内的语句是可选的, \. 匹配 ".",小括号表示分组。例如匹配:"5"、"1.5" 和 "2.21" 2. 正则表达式的编写规则 2.1 常见匹配符号 正则表达式 描述 . 匹配所有单个字符,除了换行符(Linux 中换行是 \n ,Windows 中换行是 \r\n ) ^regex 正则必须匹配字符串开头 regex$ 正则必须匹配字符串结尾 [abc] 复选集定义,匹配字母 a 或 b 或 c [abc][vz] 复选集定义,匹配字母 a 或 b 或 c

知识点 正则

主宰稳场 提交于 2019-11-27 21:44:42
package main import ( "fmt" "regexp" ) func main() { reg, err := regexp.Compile("[a-z0-9#$%&]+") if err != nil { fmt.Println(err) } fmt.Println(reg.MatchString("AIh")) fmt.Println(reg.MatchString("an82&#")) } 运行结果: false true 第一个字符串AIh不匹配,第二个an82&#匹配。传入函数(re *Regexp) MatchString(s string) bool的字符串的每一个字符都会被检验是否属于[a-z0-9#$%&]其中的一个, a-z表示从小写a到小写z的26个英文字母,0-9表示从0到9的10个数字,#$%&是四个特殊字符,AIh中有两个大写字母,一个小写字母,h属于a-z,但字母A和I都不属于a-z, 也不属于0-9,也不属于特殊字符,所以第一个不匹配,只要一段内容中有一个字符不匹配[a-z0-9#$%&]+,就表示该段内容不匹配,中括号外面的加号+表示多个匹配, 即要求每一个字符都属于小写字母或数字,或四个特殊字符中的一个; [a-z0-7#$%&]去掉加号,表示某个字符串中只要有一个字符匹配,就表示匹配,每一个字符都不匹配,才表示不匹配。 reg

doraemon的python 正则分组和循环实现递归

前提是你 提交于 2019-11-26 10:27:23
### 8.5 正则模块(re模块) - findall ```python ret = re.findall('\d+','liujia123') #findall会匹配字符串中所有符合规则的项 #并返回一个列表 #如果未匹配到返回的就是一个空列表 ``` - search ```python ret = re.search('\d+','liujia123') print(ret) if ret: print(ret,group()) #会从头到尾从待匹配字符串中取出第一个符合条件的项 #如果匹配到了,就返回一个对象,用group取值 #如果没有匹配到,就返回None,不能用group ``` - match ```python re = re.match('\d+',"liujia123") print(ret) #会从头到尾匹配字符串中第一个字符是否符合规范 #如果符合,就返回对象,用group取值 #如果不符合,就返回None ``` - finditer ```python ret = re.finditer('\d+','liujia123'*20000) #ret是迭代器 for i in ret: #迭代出来的每一项都是一个对象 print(i.group()) #通过group取值就行 ``` - compile ```python ret = re

正则性能调优

走远了吗. 提交于 2019-11-25 22:58:40
这篇文章主要是分享最近在开发中正则的学习心得体会。我们开发,一开始是采用python的正则库,后来为了适应Spring Cloud兼容Java所以正则也相应的修改成为了Java版本,经过测试,Java在匹配速度上相对慢了好多,平台一天需要处理一亿多条日志,但按照当时的处理速度,每天差不多就只能处理了2千多万条,这样的速度,实在扎心,提单申请扩容,那边的负责人说资源不足,好咯,将Java所使用的正则库替换成C++,C++够快了吧,不过,这个库是通过牺牲功能换取性能来实现的。 正则表达式的原理 理论模型是 有穷自动机 ,具体的实现为 正则引擎(Regex Engine) 分两类 确定型有穷自动机(Definite Finite Automata,DFA,其状态都是确定) 和 非确定型有穷自动机(Non-definite Finite Automate,NFA,其状态在某个时刻是不确定的) 。DFA和NFA是可以证明存在等价关系,不过这是两种不同的自动机。在这里,我才不会深入讨论它们的原理。简单地说,DFA 的时间复杂度是线性的。它更稳定,但功能有限。NFA 的时间复杂度相对不稳定。 根据正则表达式的不同,时间有时长,有时短。NFA 的优点是它的功能更强大,所以被 Java、.NET、Perl、Python、Ruby 和 PHP 用来处理正则表达式。 NFA 是怎样进行匹配的呢